Laravel Eloquent ORM 从入门到精通
 码农资讯网 阅读:230 2025-04-14 
                    什么是 Eloquent ORM?
Eloquent 是 Laravel 框架自带的 ORM(Object-Relational Mapping)组件,它允许你使用 面向对象的方式来操作数据库表。每一个模型代表数据库中的一张表,模型类的每一个实例代表表中的一行记录。
📦 一、入门基础
1. 创建模型
php artisan make:model Article
这将生成 app/Models/Article.php,默认关联表名为 articles。
✅ 若表名与模型名不一致,可在模型中指定:
protected $table = 'custom_table_name';
2. 常用属性
protected $primaryKey = 'id'; // 主键字段名public $timestamps = true; // 自动维护 created_at、updated_atprotected $fillable = ['title', 'body']; // 允许批量赋值protected $guarded = []; // 禁止批量赋值(空数组表示全部允许)
📋 二、CRUD 基础操作
1. 查询
Article::all();                     // 获取所有Article::find(1);                   // 主键查找Article::where('status', 1)->get(); // 条件查询链式调用:
$articles = Article::where('status', 1)
                   ->orderBy('created_at', 'desc')
                   ->take(10)
                   ->get();2. 新增
$article = new Article;$article->title = '标题';$article->body = '内容';$article->save();
或使用批量赋值:
Article::create([ 'title' => '标题', 'body' => '内容', ]);
3. 更新
$article = Article::find(1);$article->title = '新标题';$article->save();
也可以:
Article::where('id', 1)->update(['title' => '新标题']);4. 删除
Article::find(1)->delete();Article::destroy([1, 2, 3]); // 批量删除
🔄 三、查询构建器进阶
1. 模糊搜索
Article::where('title', 'like', '%Laravel%')->get();2. where 多条件
Article::where('status', 1)->where('views', '>', 100)->get();3. whereIn / whereBetween
Article::whereIn('id', [1, 2, 3])->get();Article::whereBetween('views', [100, 500])->get();4. 原生表达式
Article::select('id', DB::raw('LENGTH(title) as title_length'))->get();🧱 四、模型关系(重点)
1. 一对一
// User 模型public function profile() {    return $this->hasOne(Profile::class);
}2. 一对多
// Article 模型public function comments() {    return $this->hasMany(Comment::class);
}3. 反向关联
// Comment 模型public function article() {    return $this->belongsTo(Article::class);
}4. 多对多
// User 模型public function roles() {    return $this->belongsToMany(Role::class);
}5. 预加载(避免 N+1)
User::with('profile')->get();🛠️ 五、常用功能与技巧
1. 访问器 & 修改器(Accessor & Mutator)
// 访问器(读取时格式化)public function getTitleAttribute($value) {    return strtoupper($value);
}// 修改器(写入时处理)public function setTitleAttribute($value) {    $this->attributes['title'] = trim($value);
}2. 全局作用域
protected static function booted() {    static::addGlobalScope('active', function ($query) {        $query->where('status', 1);
    });
}3. 日期格式处理
protected $dates = ['created_at', 'updated_at'];
📈 六、进阶操作
1. 分页
$articles = Article::paginate(10);
2. Chunk 分批处理大数据
Article::chunk(100, function ($articles) {    foreach ($articles as $article) {        // do something
    }
});3. 查询日志调试
DB::enableQueryLog();// 执行查询dd(DB::getQueryLog());
🧪 七、测试与工厂
Laravel 支持通过模型工厂快速生成测试数据:
php artisan make:factory ArticleFactory
在 database/factories/ArticleFactory.php 中配置字段数据。
public function definition() {    return [        'title' => $this->faker->sentence,        'body'  => $this->faker->paragraph,
    ];
}生成数据:
php复制编辑Article::factory()->count(50)->create();
✅ 八、实用建议与最佳实践
- 尽量使用 预加载 with(),避免 N+1 查询问题; 
- 控制字段赋值:使用 - $fillable或- $guarded;
- 合理使用作用域封装常用查询逻辑; 
- 使用 访问器/修改器 处理数据格式; 
- 对于复杂 SQL 查询,考虑使用 Query Builder 或原生 SQL; 
🎯 结语
Eloquent ORM 作为 Laravel 的核心之一,为我们提供了优雅、简洁、强大的数据库操作方式。掌握 Eloquent 不仅能提升开发效率,也能写出更具可读性和维护性的代码。
声明
                        
                        1、部分文章来源于网络,仅作为参考。 2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!

