我是新的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中转换这个查询。所以请善意解决这个问题
答案 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();