减去两个口才结果表

时间:2018-12-05 15:24:54

标签: php laravel eloquent

有了口才,我从数据库中得到了两个类似的结果:

$deliveries = table1::select('place_id','product_id',DB::raw("SUM(amount) as amount"))->groupBy('place_id', 'product_id');

$purchases = table2::select('place_id','product_id',DB::raw("SUM(quantity) as amount"))->groupBy('place_id', 'product_id');

如果

,我想得到一个表格,其中table2的所有金额条目都减去了table1
place_id from table1 == place_id from table2 
AND 
product_id from table1 == product_id from table2

如果可能的话,我想使用Eloquent,但我也可以在其中使用一些原始SQL,甚至可以使用一些快速的php-array-method做类似的事情:

$inventory = $deliveries - $purchases;

编辑/添加

现在我这样做:

foreach ($deliveries as $delivery => $delivValue) {
        foreach ($purchases as $purchase => $purchValue) {
            if ($delivValue['place_id']==$purchValue['place_id'] && $delivValue['product_id']==$purchValue['product_id']) {
                $deliveries[$delivery]['amount'] = $delivValue['amount'] - $purchValue['amount'];
            }
        }
    }

这可以按预期工作,但是我认为当数组大小确实增加时效率很低。

1 个答案:

答案 0 :(得分:0)

我说的是,即使您使用laravel的diff()之类的辅助方法,也可以做到这一点,但是它们在内部仍使用相同的方法,所以最好的选择是在数据库级别做到这一点

尝试在数据库级别编写此逻辑,例如

DB::select('
    SELECT table1.place_id,table1.product_id,amount,quantity, amount-quantity 
    FROM table1 JOIN table2 
    ON (table1.place_id = table2.place_id 
                  and table1.product_id = table2.product_id)
'); 

http://sqlfiddle.com/#!9/2d5775/6/2

使用的DB :: select-假设您未接受任何用户输入