You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:01:08