#mysql #for-loop #php-7.3 #laravel-6.2
#mysql #for-цикл #php-7.3 #laravel-6.2
Вопрос:
У меня здесь есть цикл for, который останавливает цикл после первого цикла из-за значения $due = 0
. Если значение $due
равно чему-либо, кроме 0
, цикл выполняется нормально, и все работает — проблема в том, что это условие всегда должно быть равно нулю. Бьюсь головой об стену на этом. Есть идеи? Вот цикл:
for ($i = 0; $i < $unpaid->getInvoiceQuantity($customer_id); $i ) {
$each_invoice_id = $request->input('invoice_id' . $i);
$whats_due = DB::table('invoices')
->select('due')
->where('id','=', $request->input('invoice_id' . $i))
->first();
$invoice_payment_total = $request->input('total' . $i);
$inv_id_array = array('invoice_id' => $request->input('invoice_id' . $i), 'payment_id' => $payment_id,
'no_invoice' => false);
DB::table('payment_applications')->insert($inv_id_array);
$due = 0;
if ($whats_due->due == $invoice_payment_total) {
$due = 0;
}
if ($whats_due->due > $invoice_payment_total) {
$due = $whats_due->due - $invoice_payment_total;
}
$update_array = array('due' => $due);
DB::table('invoices')->where('id', $request->input('invoice_id' . $i))
->update($update_array);
$payment_application_update_array = array('amount' => $request->input('total' . $i));
DB::table('payment_applications')->where('invoice_id', $request->input('invoice_id' . $i))
->update($payment_application_update_array);
}
Ответ №1:
Одним из обновлений должно быть изменение количества накладной и уменьшение его $i
, поэтому условие цикла больше не выполняется.
Вы должны сохранить значение в переменной, а не вызывать метод каждый раз.
$quantity = $unpaid->getInvoiceQuantity($customer_id);
for ($i = 0; $i < $quantity; $i ) {
// rest of loop
}