Laravel查询构造器通过链式调用和防注入机制提升数据库操作效率与安全性。1. 使用when方法可动态添加查询条件,根据用户输入灵活筛选数据,避免冗余if判断;2. 支持子查询,利用fromSub或joinSub实现复杂关联,如获取每个用户的最新订单;3. 提供高级聚合功能,结合having、groupBy和DB::raw进行分组统计与过滤,例如筛选月销售额超1000的记录;4. 在事务中使用lockForUpdate和sharedLock确保并发安全,如扣减库存时防止超卖。合理运用这些特性可显著优化查询逻辑与系统稳定性。

Laravel 的查询构造器(Query Builder)提供了一种流畅且直观的方式来构建数据库查询,无需编写原始 SQL 语句。它既支持链式调用,又能防止 SQL 注入,是 Laravel 开发中操作数据库的核心工具之一。掌握其高级用法,能显著提升开发效率和代码可读性。
在实际项目中,查询条件往往不是固定的。使用 when 方法可以根据运行时条件动态添加查询逻辑,避免冗长的 if 判断。
when() 只有在条件为真时才执行回调中的查询示例:根据用户输入动态筛选订单
$status = request('status');<br>$search = request('q');<br><br>$orders = DB::table('orders')<br> ->when($status, function ($query, $status) {<br> return $query->where('status', $status);<br> })<br> ->when($search, function ($query, $search) {<br> return $query->where('title', 'like', "%{$search}%");<br> }, function ($query) {<br> return $query->where('status', 'pending'); // 默认只查待处理<br> })<br> ->get();Laravel 允许将查询构造器实例作为子查询使用,适用于复杂的数据关联场景。
fromSub() 或 selectSub() 构建子查询示例:获取每个用户的最新一条订单
$latestOrders = DB::table('orders')<br> ->select('user_id', DB::raw('MAX(created_at) as last_order'))<br> ->groupBy('user_id');<br><br>$users = DB::table('users')<br> ->joinSub($latestOrders, 'latest', function ($join) {<br> $join->on('users.id', '=', 'latest.user_id');<br> })<br> ->get();除了基本的 count、sum,还可以结合条件聚合、分组过滤等操作。
having() 对分组结果进行筛选DB::raw() 实现复杂聚合表达式groupBy() 多字段分组示例:统计每月订单金额,并只显示总额超过 1000 的月份
$monthlySales = DB::table('orders')<br> ->select(<br> DB::raw('YEAR(created_at) as year'),<br> DB::raw('MONTH(created_at) as month'),<br> DB::raw('SUM(amount) as total')<br> )<br> ->groupBy('year', 'month')<br> ->having('total', '>', 1000)<br> ->get();在高并发场景下,使用锁可以防止数据竞争。Laravel 提供了多种锁定方式。
lockForUpdate():排他锁,用于更新前锁定行sharedLock():共享锁,允许其他事务读取但不能修改示例:安全地扣减库存
DB::transaction(function () {<br> $product = DB::table('products')<br> ->where('id', 1)<br> ->lockForUpdate()<br> ->first();<br><br> if ($product->stock > 0) {<br> DB::table('products')<br> ->where('id', 1)<br> ->update(['stock' => $product->stock - 1]);<br> }<br>});基本上就这些。熟练运用这些高级技巧,能让数据库操作更简洁、安全、高效。重点在于理解链式调用的逻辑和各方法的实际作用场景,避免过度复杂化查询。合理使用子查询、条件构建和锁机制,能应对大多数业务需求。
以上就是Laravel的查询构造器怎么用_Laravel Query Builder高级查询技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号