如何使用Laravel查询构建器组合同一个表中的两个查询

时间:2016-08-11 16:03:44

标签: mysql laravel query-builder laravel-query-builder

在此销售表中,我创建了2个查询。

Sale::where(branch_id', 1)->select('*', DB::raw('SUM(amount) as amount))->groupBy('date')->get()

Sale::where(branch_id', 2)->select('*', DB::raw('SUM(amount) as amount))->groupBy('date')->get()

我想结合两个查询...

实现此目标

enter image description here

这是我的销售表

actual sales table

3 个答案:

答案 0 :(得分:3)

由于除了整数之外它们都是相同的,你可以这样做:

Sale::whereIn('branch_id', [1, 2])->...

...让其余的查询保持不变。

答案 1 :(得分:2)

我认为您在原始SQL中寻找的是:

SELECT 
    `date`,
    SUM(IF(branch_id = 1, amount, 0)) as 'Branch 1',
    SUM(IF(branch_id = 2, amount, 0)) as 'Branch 2',
    SUM(amount) as 'Total'
FROM
    branches
WHERE
    branch_id IN (1,2)
GROUP BY
    `date`;

很遗憾,您无法使用querybuilder完成大部分操作,因此您需要使用DB::raw()执行此操作,如下所示:

Sale::whereIn(branch_id', [1,2])->
        select('date',
                DB::raw("
                    SUM(IF(branch_id = 1, amount, 0)) as 'Branch 1',
                    SUM(IF(branch_id = 2, amount, 0)) as 'Branch 2',
                    SUM(amount) as amount
                    ")
                )->groupBy('date')->get();

我还没有在Laravel中对此进行过测试,所以可能会略微偏离,但它会让你接近。

Sample fiddle.

答案 2 :(得分:0)

试试这个。

DB ::表( '销售') - >其中( 'branch_id',[1,'2]) - >得到();

相关问题