Laravel Invoice & InvoiceItems - Как обновить? - PullRequest
0 голосов
/ 05 декабря 2018

Я использую Laravel 5.7 & VueJs 2.5.* ...

У меня есть две таблицы TicketInvoice & TicketInvoiceItems, с отношением типа TicketInvoice hasMany TicketInvoiceItems & TicketInvoiceItems ownTo 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);

    }

1 Ответ

0 голосов
/ 05 декабря 2018

Сначала удалены дочерние записи:

    $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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...