在 Laravel 中,Eloquent 的查询构建器(Query Builder)提供了一种面向对象的方式构建数据库查询,无需直接编写 SQL 语句。以下是其核心用法及实践建议:
1. 基础查询使用 DB::table() 方法指定数据表,并通过链式调用构建查询:
- 获取所有数据$users = DB::table('users')->get();
- 获取单条记录$user = DB::table('users')->where('id', 1)->first();
- 获取特定字段$emails = DB::table('users')->select('email')->get();
2. 条件查询与排序通过 where()、orderBy() 等方法实现复杂条件:
- 多条件查询$users = DB::table('users') ->where('age', '>', 25) ->where('status', 'active') ->get();
- 排序与分页$users = DB::table('users') ->orderBy('name', 'desc') ->offset(10) ->limit(5) ->get();
3. 联表查询使用 join() 方法关联多表数据:
- 内联表查询$posts = DB::table('posts') ->join('users', 'posts.user_id', '=', 'users.id') ->select('posts.*', 'users.name as user_name') ->get();
- 左连接与条件$posts = DB::table('posts') ->leftJoin('comments', 'posts.id', '=', 'comments.post_id') ->where('comments.is_approved', true) ->get();
4. 聚合函数与分组支持 count()、sum() 等聚合操作:
- 统计与分组$stats = DB::table('orders') ->select('user_id', DB::raw('count(*) as total')) ->groupBy('user_id') ->get();
5. 结合 Eloquent 模型通过模型作用域(Scope)封装常用查询逻辑:
- 定义作用域class User extends Model { public function scopeActive($query) { return $query->where('is_active', true); }}
- 调用作用域$activeUsers = User::active() ->where('age', '>', 25) ->orderBy('name') ->get();
6. 性能优化建议- 避免 N+1 问题使用 with() 预加载关联数据:$posts = Post::with('user')->get();
- 索引优化确保查询字段(如 where 条件、join 字段)有数据库索引。
- 分块处理大数据DB::table('users')->chunk(200, function ($users) { foreach ($users as $user) { // 处理数据 }});
7. 注意事项- SQL 注入防护查询构建器自动处理参数绑定,避免直接拼接 SQL 字符串。
- 复杂查询拆分若查询逻辑过于复杂,可拆分为多个小查询或使用原生 SQL(DB::raw())。
- 调试与优化使用 toSql() 查看生成的 SQL:$query = DB::table('users')->where('age', '>', 25);dd($query->toSql());
总结Eloquent 查询构建器通过链式调用简化了数据库操作,支持条件查询、联表、聚合等核心功能。结合 Eloquent 模型的作用域机制,可进一步提升代码复用性。实际开发中需平衡性能与可读性,针对大数据量场景优化索引和查询结构。