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

如何将指定嵌套SQL查询转换为Laravel Eloquent查询构造器?

转换后的Laravel Eloquent查询构造器实现

下面是对应你提供的SQL语句的两种Eloquent实现方式:

方式一:拆分子查询(更易读)

// 构建子查询:筛选出每个payment只出现一次的交易记录
$subQuery = \App\Models\Transaction::query()
    ->select('*')
    ->groupBy('payment')
    ->havingRaw('count(payment) = 1');

// 外层查询:统计符合时间区间的子查询结果数量
$count = \Illuminate\Support\Facades\DB::query()
    ->selectRaw('count(x.payment)')
    ->fromSub($subQuery, 'x')
    ->whereBetween('x.updated_at', ['2021-06-14', '2022-06-20'])
    ->value('count(x.payment)');

方式二:嵌套子查询(更紧凑)

$count = \Illuminate\Support\Facades\DB::query()
    ->selectRaw('count(x.payment)')
    ->fromSub(function ($query) {
        $query->from('transactions')
              ->select('*')
              ->groupBy('payment')
              ->havingRaw('count(payment) = 1');
    }, 'x')
    ->whereBetween('x.updated_at', ['2021-06-14', '2022-06-20'])
    ->value('count(x.payment)');

关键对应说明

  • fromSub方法用于将子查询作为数据源,第二个参数对应原SQL中子查询的别名x
  • havingRaw直接沿用原SQL的having条件,避免Eloquent的语法限制
  • whereBetween等价于SQL中的between ... AND ...语法
  • value方法直接返回统计结果,无需处理额外的集合对象

内容的提问来源于stack exchange,提问作者cena_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:40:17