用concat口述的子查询

时间:2017-01-18 20:20:25

标签: eloquent subquery laravel-5.3 laravel-eloquent

我是新的laravel 5.3并且面对有问题的子查询问题。我不知道如何使用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中转换这个查询。所以请善意解决这个问题

1 个答案:

答案 0 :(得分: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();