0

我是新的 laravel 5.3,并且面临着 eloquent 的子查询问题。我不知道如何使用 eloquent 编写子查询。我的查询如下。

select concat(m, '-', y), total
FROM (
    select  month(`date`) as m , year(`date`) as y,  round(sum(amount)) as total 
    from `budget` 
    where 
        `user_id` = 1 and 
        `amount` is not null  
    group by m, y
) as t 

这在 MySQL 中运行良好。那么我们如何才能将这个查询转换成 eloquent。所以请解决这个问题

4

1 回答 1

1

您需要先创建子查询,然后才能合并父查询中的绑定:

$sub = Budget::selectSub('month(`date`)', 'm')
    ->selectSub('year(`date`)', 'y')
    ->selectSub('round(sum(amount))', 'total')
    ->where('user_id', 1)
    ->whereNotNull('amount')
    ->groupBy('m', 'y');

$data = DB::table(DB::raw("({$sub->toSql()}) as t"))
    ->mergeBindings($sub->getQuery())
    ->selectRaw("concat(m, '-', y)")
    ->addSelect('total')
    ->get();
于 2017-01-18T23:54:08.413 回答