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;
        }
    }
}