[英]Laravel one page crud Select all from table2 where id = table1.id
[英]Calculate sum using Laravel Query Builder by applying groupBy on Table1.id but without soft deleted rows on Table2?
我要获取所有购买及其金额,并且如果payments.deleted_at不为null,我也不想添加金额。
这是桌子
购买
id | name
1 | Gamerzone Book
2 | Recipe Book
3 | EngineX Book
付款方式
id | purchase_id | amount | deleted_at
1 1 100 2015-06-12 11:00:00
2 2 50 NULL
2 2 10 NULL
码
$query = DB::table('purchases')
->select(['purchases.*',
DB::raw("IFNULL(sum(payments.amount),0) as total")
])
->leftJoin('payments','payments.purchase_id','=','purchases.id')
->whereNull('payments.deleted_at')
->groupBy('purchases.id')->get();
当我运行下面的代码时,第一个结果不包括在内。 结果
id | name | total
2 | Recipe Book 60
3 | EngineX Book 0
我知道为什么它不包括在内,但问题是如果我删除whereNull('payments.deleted_at')支付中的特定行也将加到总和中,我该如何解决?
预期结果
id | name | total
1 | Gamerzone Book 0
2 | Recipe Book 60
3 | EngineX Book 0
在这种情况下,您的加入条件应如下所示:
开启(payments.booking_id = purchases.id和payments.deleted_at不为空)
它与WHERE无关(根据您的SELECT)。 您应该像这样使用join-closure:
$query = DB::table('purchases')
->select(['purchases.*', DB::raw("IFNULL(sum(payments.amount),0) as total")])
->leftJoin('payments', function($join) {
$join->on('payments.booking_id', '=', 'purchases.id');
$join->on('payments.deleted_at', 'IS', DB::raw('NOT NULL'));
})
->groupBy('purchases.id')->get();
只需更换
->leftJoin('payments','payments.booking_id','=','purchases.id')
与
->leftJoin('payments', function($join) {
$join->on('payments.booking_id', '=', 'purchases.id');
$join->on('payments.deleted_at', 'IS', DB::raw('NOT NULL'));
})
并删除此:
->whereNull('payments.deleted_at')
它应该有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.