Laravel Eloquent ORM 从入门到精通
阅读:13 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处理!