首页 > 解决方案 > Laravel Invoice & InvoiceItems - 如何更新?

问题描述

我正在使用Laravel 5.7& VueJs 2.5.*...

我有两个表TicketInvoice& TicketInvoiceItems,其关系类似于TicketInvoicehasMany TicketInvoiceItems& TicketInvoiceItemsbelongsTo TicketInvoice...

我可以成功创建TicketInvoice& TicketInvoiceItems但我不知道如何更新它...

这是我的store方法(工作):

    public function store(Request $request)
    {   
        $ticketInvoiceItems = collect();

        foreach($request['ticketInvoiceItems'] as $invoiceItem) {
        $ticketInvoiceItems->push(new TicketInvoiceItems ([
            'passenger_name' => $invoiceItem ['passenger_name'],
            'ticket_no' => $invoiceItem ['ticket_no'],
            'fares' => $invoiceItem ['fares'],
            'sub_total' => $invoiceItem ['sub_total']
        ]));
        }

        $ticketInvoice = TicketInvoice::create([
            'vendor_id' => $request['vendor_id'],
            'ticket_invoice_no' => $request['ticket_invoice_no'],
            'ticket_invoice_date' => $request['ticket_invoice_date'],
            'ticket_invoice_fares_total' => $request['ticket_invoice_fares_total'],
            'ticket_invoice_grand_total' => $request['ticket_invoice_grand_total'],
        ]);

        $ticketInvoice->ticketInvoiceItems()->saveMany($ticketInvoiceItems);
    }

这是我的update方法(不工作:'():

    public function update(Request $request, $id)
    {
        $ticketInvoice = TicketInvoice::findOrFail($id);

        $ticketInvoiceItems = collect();

        foreach($request['ticketInvoiceItems'] as $invoiceItem) {
            $ticketInvoiceItems->push(new TicketInvoiceItems ([
                'passenger_name' => $invoiceItem ['passenger_name'],
                'ticket_no' => $invoiceItem ['ticket_no'],
                'fares' => $invoiceItem ['fares'],
                'sub_total' => $invoiceItem ['sub_total']
            ]));
            }
            $ticketInvoice->update($request->all());
            $ticketInvoice->ticketInvoiceItems()->update($ticketInvoiceItems);

    }

标签: javascriptlaravelvue.jsvuejs2laravel-5.7

解决方案


一、删除子记录:

    $ticketInvoice->ticketInvoiceItems()->delete();

然后存储新的:

    $ticketInvoiceItems = collect();

    foreach($request['ticketInvoiceItems'] as $invoiceItem) {
        $ticketInvoiceItems->push(new TicketInvoiceItems ([
            'passenger_name' => $invoiceItem ['passenger_name'],
            'ticket_no' => $invoiceItem ['ticket_no'],
            'fares' => $invoiceItem ['fares'],
            'sub_total' => $invoiceItem ['sub_total']
        ]));
    }

    $ticketInvoice->ticketInvoiceItems()->saveMany($ticketInvoiceItems);

推荐阅读