如何在Laravel中使用SQL查询?将指定SQL转换为Laravel实现
Laravel 查询构造器实现子查询统计
原SQL的逻辑是:筛选出tbl_order表中delete_status=1的数据,按patient_id和event_no分组后,统计这些分组的总数。下面提供两种Laravel查询构造器的实现方式:
方式一:完全等价于原SQL的子查询写法
直接构建派生表来实现,和原SQL逻辑完全一致:
$count = DB::table(function ($query) { $query->select('order_id') ->from('tbl_order') ->where('delete_status', 1) ->groupBy('patient_id', 'event_no'); }, 'DerivedTableAlias') ->count();
这段代码中,DB::table()接收闭包定义子查询,指定派生表别名DerivedTableAlias,最后调用count()统计行数。
方式二:更高效的简化写法
原SQL的本质是统计patient_id和event_no的唯一组合数量,因此可以直接用distinct简化,无需子查询:
$count = DB::table('tbl_order') ->where('delete_status', 1) ->count(DB::raw('distinct patient_id, event_no'));
这种写法避免了派生表的生成,执行效率更高,结果和原SQL完全一致。
基于Eloquent模型的写法
如果你的项目中使用了Eloquent模型(假设对应模型为Order),也可以这样实现:
子查询方式
$count = DB::table(function ($query) { $query->select('order_id') ->from((new Order)->getTable()) ->where('delete_status', 1) ->groupBy('patient_id', 'event_no'); }, 'DerivedTableAlias') ->count();
简化方式
$count = Order::where('delete_status', 1) ->count(DB::raw('distinct patient_id, event_no'));
内容的提问来源于stack exchange,提问作者Arun Kumawat
相关产品推荐
相关产品推荐

