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 不仅能提升开发效率,也能写出更具可读性和维护性的代码。


标签: Laravel
声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!