我的Laravel应用程序中有几个表,一个叫做货运,另一个叫付款分配。
在我的货件中,我有名为pro_number和balance的列。
在我的payments_distributions中,我有名为shipment_id和amount的列。
现在我有一个控制器,里面有这部分代码:
}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表中amount字段的总和,其中payment_distributions表中的shipment_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'));
}
}
答案 0 :(得分:1)
您应该能够将该子查询用作->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
但是,我怀疑我们可能会重写您的查询以废除var testdata = [
{utcts: 1, data: 'a'},
{utcts: 4, data: 'b'},
{utcts: 6, data: 'c'},
{utcts: 10, data: 'd'}
];
子句中的相关子查询。