我想请你帮忙。我不是一个很难的编码人员,所以我无法构建这样做的正确代码。
我有一个订单付款应用程序,可以保存某些订单的付款。那里没有问题。数据正在ORDER_PAYMENTs表中保存。
在我的创建功能中我有这个
public function create($order_id)
{
$order = Orders::find($order_id);
$order->company;
$order->currency;
$banks = Banks::all('name','acronym','id')->pluck('name','id')->all();
$balance = Orderpayments::where('order_id', '=', $order_id)->sum('amount');
// dd($balance);
return view('orderPayments.create', compact('balance'))
->with('banks', $banks)
->with('order', $order);
}
变量$ balance进行总量的计算,然后我将在create.blade
中进行实际计算以检查是否还有余额。这是它的样子
<div class="form-group">
<span><strong>Remaining Balance</strong></span>
<p class="text-danger">@php $remainingBalance = $order->grandtotal-$balance; @endphp
{{ number_format($remainingBalance, 2) }}</p>
</div>
现在,我想要做的是在存储数据(我指的是STORE功能)时创建条件,如果付款涵盖所有余额,它应该更新列,在ORDERS表中的PAID。这是我的商店功能的当前外观。
public function store(Request $request)
{
$this->validate($request, [
'order_id' => '',
'company_id' => '',
'currency_id' => '',
'bank' => '',
'type' => '',
'payment_date' => '',
'amount' => 'min:1',
'rate' => '',
'bank' => '',
'page' => '',
'number' => '',
'booklet_number'=> '',
'voucher_num' => '',
'notes' => '',
'user_id' => ''
]);
$orderpayments = Orderpayments::create($request->only(
'order_id',
'company_id',
'currency_id',
'bank',
'type',
'payment_date',
'amount',
'rate',
'bank',
'page',
'number',
'booklet_number',
'voucher_num',
'notes',
'user_id'
));
// NO IDEA ON HOW TO MAKE THE CONDITION PROPERLY
// $balance = Orderpayments::where('order_id', '=', $order_id)->sum('amount');
$order = Orders::all();
// $paidOrder = $order->paid;
dd($balance);
// if ($balance < 1) {
// $amount = ;
// $item->save();
// }
if ($request){
Session::flash('message','Purchase order was successfully added');
Session::flash('m-class','alert-success');
} else {
Session::flash('message','Data is not saved');
Session::flash('m-class','alert-danger');
return redirect()->route('orders.index');
}
return redirect()->route('orders.index');
}
首先,我想从CREATE函数获取$ balance变量,因为它已经有计算然后从那里我将检查$balance
是否低于1然后如果它将订单表中的PAID列更新为'1'
我不是一个很难的编码器我只是做了这么远,因为来自世界各地的教程并在这里提问。我找不到合适的教程来解决我的问题。你能帮我构建我想要实现的逻辑吗?
非常感谢你们!
进展更新
我现在有这个
// HERE'S THE PART THAT THE CONDITION IS PLACE
//get the total amount paid
$totalPaidAmount = Orderpayments::where('order_id', '=', $orderpayments->order_id)->sum('amount');
//get the total order cost
$orderGrandTotal = Orders::where('id', '=', $orderpayments->order_id)->get();
//Set variable for grand total attribute Orders table
$grandtotal = $orderGrandTotal->first()->grandtotal;
//set variable for paid attribute in Orders table
$paid = $orderGrandTotal->first()->paid;
//Get the difference between total order cost and total amount paid
$totalBalance = $grandtotal - $totalPaidAmount;
// dd($totalBalance);
if ($totalBalance == 0) {
$paid = 1;
$paid->save();
}
我的新问题是,当余额达到0时,我放的条件应该保存$ paid = 1吧?相反,我有这个错误
目前这是我的问题。保存部分和条件。
我希望你能帮助我们。提前致谢!!!
解决了
伙计们,以防你在这种情况下陷入困境,这就是我所做的。
// HERE'S THE PART THAT THE CONDITION IS PLACE
//get the total amount paid
$totalPaidAmount = Orderpayments::where('order_id', '=', $orderpayments->order_id)->sum('amount');
//get the total order cost
$orderGrandTotal = Orders::where('id', '=', $orderpayments->order_id)->get();
//Set variable for grand total attribute Orders table
$grandtotal = $orderGrandTotal->first()->grandtotal;
//Get the difference between total order cost and total amount paid
$totalBalance = $grandtotal - $totalPaidAmount;
if ($totalBalance < 1) {
$setToPaid = \App\Orders::where('id', '=', $orderpayments->order_id)->first();
$setToPaid->paid = 1;
$setToPaid->save();
}
if ($request){
Session::flash('message','Purchase order was successfully added');
Session::flash('m-class','alert-success');
} else {
Session::flash('message','Data is not saved');
Session::flash('m-class','alert-danger');
return redirect()->route('orders.index');
}
return redirect()->route('orders.index');
Learn more here感谢@Marco提示!
来自docs
// HERE'S THE PART THAT THE CONDITION IS PLACE
//get the total amount paid
$totalPaidAmount = Orderpayments::where('order_id', '=', $orderpayments->order_id)->sum('amount');
//get the total order cost
//$orderGrandTotal = Orders::where('id', '=', $orderpayments->order_id)->get();
$orderGrandTotal = Orders::find($orderpayments->order_id);
//Set variable for grand total attribute Orders table
$grandtotal = $orderGrandTotal->grandtotal;
//set variable for paid attribute in Orders table
$paid = $orderGrandTotal->paid;
//Get the difference between total order cost and total amount paid
$totalBalance = $grandtotal - $totalPaidAmount;
// dd($totalBalance);
if ($totalBalance == 0) {
$orderGrandTotal->paid = 1;
$orderGrandTotal->save();
}
我没有测试过,但这是你想要的方向。