#php #laravel #if-statement #conditional-statements
#php #laravel #if-оператор #условные операторы
Вопрос:
Я хотел бы попросить вашей помощи. Я не являюсь опытным программистом, поэтому я не могу создать правильный код для этого.
У меня есть приложение для оплаты заказов, которое сохраняет оплату за определенные заказы. Там нет проблем. данные сохраняются в таблице ORDER_PAYMENTs.
в моей функции create у меня есть это
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>
Теперь, что я хочу сделать, это поставить условие при СОХРАНЕНИИ данных (я имею в виду функцию СОХРАНЕНИЯ), что если платеж покрывает весь оставшийся баланс, он должен обновить столбец «ОПЛАЧЕНО» в таблице «ЗАКАЗЫ«. Вот текущий вид моей функции хранения.
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');
}
Сначала я подумываю получить переменную $ balance из функции CREATE, поскольку в ней уже есть вычисления, затем оттуда я проверю, $balance
ниже 1, а затем, если это так, обновлю столбец ОПЛАЧЕНО из таблицы заказов до ‘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 = AppOrders::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');
Узнайте больше здесь Спасибо @Marco за совет!
Комментарии:
1. Вы присваиваете целое число $ paid и прямо ниже пытаетесь вызвать для него метод! Понял? То, что находится в $paid, больше не является объектом, который вы можете вызвать методом. Вам нужно сделать что-то подобное для создания, но на самом деле обновление для обновления оплачивается до 1.
2. привет @Marco, ты можешь показать мне, как?
3. Вы используете Eloquent как ORM или что?
4. Я использую Eloquent
Ответ №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();
$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();
}
Я не тестировал, но это то направление, в котором вы хотите двигаться.
Комментарии:
1. Привет @Marco, там написано «Метод save не существует».
2. Выполните dd() в $ orderGrandTotal, у него должен быть объект o, представляющий строку из базы данных. Попробуйте прочитать ссылку на документацию, которую я также предоставил. Мы здесь, чтобы указать вам правильное направление, а не кодировать для вас.
3. Спасибо за совет
4. Я не хотел быть резким, хорошо? Я здесь, чтобы помочь, но вы должны попробовать некоторые вещи и сообщить нам, какие результаты у вас есть. 🙂
5. да @Marco не беспокойтесь 🙂 Еще раз спасибо