Laravel PHP: 从递归函数中获取值
Laravel PHP: Get values out of Recursion Function
我有一个 invoice_schedule_table
结构如下:
id, previous_invoice_schedule_id, due_date
7559, , 01-06-2021
7772, 7559, 15-06-2021
7773, 7772, 20-06-2021
我正在尝试创建一个 looping/recursive 函数,如果我打开任何发票时间表(ID:7559, 7772) 来自 UI.
function latestRescheduledInvoiceSchedule($invoiceScheduleId) {
$rescheduledPaymentSchedule = InvoiceSchedule::where('previous_invoice_schedule_id', $invoiceScheduleId)->first();
if(isset($rescheduledPaymentSchedule)) {
latestRescheduledInvoiceSchedule($rescheduledPaymentSchedule->id);
}
}
但是我不知道如何在到达最后一条记录后获取该值。
对此有任何帮助吗?
不需要递归函数。您可以使用您选择的循环来获取最新的行,如下所示:
<?php
function latestRescheduledInvoiceSchedule($invoiceScheduleId) {
$payment_schedule_row = '';
$rescheduledPaymentSchedule = '';
do{
$invoiceScheduleId = $rescheduledPaymentSchedule->id ?? $invoiceScheduleId;
$payment_schedule_row = $rescheduledPaymentSchedule ?? '';
$rescheduledPaymentSchedule = InvoiceSchedule::where('previous_invoice_schedule_id', $invoiceScheduleId)->first();
}while(!empty($rescheduledPaymentSchedule));
if(empty($payment_schedule_row)){
$payment_schedule_row = InvoiceSchedule::find($invoiceScheduleId);
}
// rest of the code goes here
dd($payment_schedule_row);
}
当未设置 $rescheduledPaymentSchedule
时,您应该检索 due_date
值,在这种情况下,它的 ID 为 7773:
function latestRescheduledInvoiceSchedule($invoiceScheduleId) {
$rescheduledPaymentSchedule = InvoiceSchedule::where('previous_invoice_schedule_id', $invoiceScheduleId)->first();
if($rescheduledPaymentSchedule) {
latestRescheduledInvoiceSchedule($rescheduledPaymentSchedule->id);
} else {
// There is no further values, retrieve the `due_date` of the current invoiceScheduleId
$last_record = InvoiceSchedule::find($invoiceScheduleId);
if ($last_record) {
$last_due_date = $last_record->due_date;
}
}
}
我有一个 invoice_schedule_table
结构如下:
id, previous_invoice_schedule_id, due_date
7559, , 01-06-2021
7772, 7559, 15-06-2021
7773, 7772, 20-06-2021
我正在尝试创建一个 looping/recursive 函数,如果我打开任何发票时间表(ID:7559, 7772) 来自 UI.
function latestRescheduledInvoiceSchedule($invoiceScheduleId) {
$rescheduledPaymentSchedule = InvoiceSchedule::where('previous_invoice_schedule_id', $invoiceScheduleId)->first();
if(isset($rescheduledPaymentSchedule)) {
latestRescheduledInvoiceSchedule($rescheduledPaymentSchedule->id);
}
}
但是我不知道如何在到达最后一条记录后获取该值。
对此有任何帮助吗?
不需要递归函数。您可以使用您选择的循环来获取最新的行,如下所示:
<?php
function latestRescheduledInvoiceSchedule($invoiceScheduleId) {
$payment_schedule_row = '';
$rescheduledPaymentSchedule = '';
do{
$invoiceScheduleId = $rescheduledPaymentSchedule->id ?? $invoiceScheduleId;
$payment_schedule_row = $rescheduledPaymentSchedule ?? '';
$rescheduledPaymentSchedule = InvoiceSchedule::where('previous_invoice_schedule_id', $invoiceScheduleId)->first();
}while(!empty($rescheduledPaymentSchedule));
if(empty($payment_schedule_row)){
$payment_schedule_row = InvoiceSchedule::find($invoiceScheduleId);
}
// rest of the code goes here
dd($payment_schedule_row);
}
当未设置 $rescheduledPaymentSchedule
时,您应该检索 due_date
值,在这种情况下,它的 ID 为 7773:
function latestRescheduledInvoiceSchedule($invoiceScheduleId) {
$rescheduledPaymentSchedule = InvoiceSchedule::where('previous_invoice_schedule_id', $invoiceScheduleId)->first();
if($rescheduledPaymentSchedule) {
latestRescheduledInvoiceSchedule($rescheduledPaymentSchedule->id);
} else {
// There is no further values, retrieve the `due_date` of the current invoiceScheduleId
$last_record = InvoiceSchedule::find($invoiceScheduleId);
if ($last_record) {
$last_due_date = $last_record->due_date;
}
}
}