有了口才,我从数据库中得到了两个类似的结果:
$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的所有金额条目都减去了table1place_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'];
}
}
}
这可以按预期工作,但是我认为当数组大小确实增加时效率很低。
答案 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-假设您未接受任何用户输入