如何使用 Laravel 查询构建器合并来自同一 table 的两个查询

How to combine two queries from the same table using Laravel query builder

根据这次销售 table,我创建了 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()

我想合并这两个查询...

实现这个

这是我的销售额table

因为除了一个整数外它们都是相同的,你可以简单地这样做:

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

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

试试这个。

DB::table('Sale')->whereIn('branch_id',[1,'2])->get();

我想你在原始 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`;

不幸的是,您不能使用查询构建器来完成大部分工作,因此您需要使用 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.