我的Laravel应用程序中有几张桌子,一个叫发运,另一个叫payments_distributions。
在我的货件中,我有称为pro_number和balance的列。
在我的payments_distributions中,有几列称为shipping_id和金额。
现在,我有一个控制器,其中包含这部分代码:
}elseif($_GET['paymentStatus']=="Unpaid"){
if(empty($_GET['pro_number'])){
$shipment = NULL;
}else{
$shipment = $_GET['pro_number'];
}
if($_GET['startDate']){
$startDate = $_GET['startDate'];
}
if($_GET['endDate']){
$endDate = $_GET['endDate'];
}
$start = $_GET['startDate'];
$end = $_GET['endDate'];
$status = $_GET['paymentStatus'];
$date = \Carbon\Carbon::today()->subDays(0);
$shipments = Shipment::sortable()
->where([
['due_date','<=',date($date)],
['pro_number', 'LIKE', '%' . $shipment . '%'],
['balance','>','SELECT SUM(payments_distributions.amount) FROM payments_distributions WHERE payments_distributions.shipment_id = pro_number'],
])
->whereBetween('date', [$startDate, $endDate])
->whereNotIn('shipment_billing_status', [2,3])
->paginate(25);
return view('shipments.accounts', compact('shipments','start','end','status'));
}
现在,我的问题出现了,如果将以下代码放入MYSQL,它们会起作用:
SELECT SUM(payments_distributions.amount) FROM payments_distributions WHERE payments_distributions.shipment_id = 214050
将返回SUM(payments_distributions.amount):300.00
因此,如果您转到我的代码行,这是唯一行不通的事情,那么,如果可以的话,这行代码对所有人都正确吗?我只想说发货行中的余额字段必须大于payment_distributions表中的金额字段总和,其中payment_distributions表中的shipping_id字段等于发货表中的pro_number字段。
['balance','>','SELECT SUM(payments_distributions.amount) FROM payments_distributions WHERE payments_distributions.shipment_id = pro_number'],
]
public function accountsQuery(){
if(($_GET['paymentStatus'] == "No Settle") or ($_GET['paymentStatus'] == "No Charge")){
if($_GET['paymentStatus'] == "No Settle"){
$status = 3;
}elseif($_GET['paymentStatus'] == "No Charge"){
$status = 2;
}
if(empty($_GET['pro_number'])){
$shipment = NULL;
}else{
$shipment = $_GET['pro_number'];
}
if($_GET['startDate']){
$startDate = $_GET['startDate'];
}
if($_GET['endDate']){
$endDate = $_GET['endDate'];
}
$start = $_GET['startDate'];
$end = $_GET['endDate'];
$status = $_GET['paymentStatus'];
$shipments = \App\Shipment::sortable()->where([
['pro_number', 'LIKE', '%' . $shipment . '%'],
['shipment_billing_status', 'LIKE', '%' . $status . '%'],
])
->whereBetween('date', [$startDate, $endDate])
->paginate(25);
return view('shipments.accounts', compact('shipments','start','end','status'));
}elseif($_GET['paymentStatus']=="Billed"){
if(empty($_GET['pro_number'])){
$shipment = NULL;
}else{
$shipment = $_GET['pro_number'];
}
if($_GET['startDate']){
$startDate = $_GET['startDate'];
}
if($_GET['endDate']){
$endDate = $_GET['endDate'];
}
$start = $_GET['startDate'];
$end = $_GET['endDate'];
$status = $_GET['paymentStatus'];
$date = \Carbon\Carbon::today()->subDays(30);
//AND TO MENTION WHERE SUM OF PAYMENTS TO THIS SHIPMENT < BALANCE DUE
$shipments = Shipment::sortable()
->where([
['date','>=', date($date)],
['pro_number', 'LIKE', '%' . $shipment . '%'],
])
->whereBetween('date', [$startDate, $endDate])
->paginate(25);
return view('shipments.accounts', compact('shipments','start','end','status'));
}elseif($_GET['paymentStatus']=="Unpaid"){
if(empty($_GET['pro_number'])){
$shipment = NULL;
}else{
$shipment = $_GET['pro_number'];
}
if($_GET['startDate']){
$startDate = $_GET['startDate'];
}
if($_GET['endDate']){
$endDate = $_GET['endDate'];
}
$start = $_GET['startDate'];
$end = $_GET['endDate'];
$status = $_GET['paymentStatus'];
$date = \Carbon\Carbon::today()->subDays(0);
$shipments = Shipment::sortable()
->where([
['due_date','<=',date($date)],
['pro_number', 'LIKE', '%' . $shipment . '%'],
])
->whereRaw('balance > SELECT SUM(p.amount) FROM payments_distributions p WHERE p.shipment_id = pro_number')
->whereBetween('date', [$startDate, $endDate])
->whereNotIn('shipment_billing_status', [2,3])
->paginate(25);
return view('shipments.accounts', compact('shipments','start','end','status'));
}
}
您应该能够将该子查询用作whereRaw
表达式的一部分:
->where([
['due_date','<=',date($date)],
['pro_number', 'LIKE', '%' . $shipment . '%']])
->whereRaw('balance > SELECT SUM(p.amount) FROM payments_distributions p WHERE p.shipment_id = pro_number')
->whereBetween('date', [$startDate, $endDate])
...
但是,我怀疑我们可能可以重写您的查询,以消除该WHERE
子句中的相关子查询。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句