Eloquent中的查询构建器(Query Builder)用法

Eloquent中的查询构建器(Query Builder)用法
最新回答
日暮盼佳人

2026-10-20 19:14:18

在 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 模型的作用域机制,可进一步提升代码复用性。实际开发中需平衡性能与可读性,针对大数据量场景优化索引和查询结构。