<?php namespace App\Invoice\Actions; use Lorisleiva\Actions\ActionRequest; use Lorisleiva\Actions\Concerns\AsAction; use App\Invoice\Models\Invoice; use App\Lib\Events\Succeeded; use Illuminate\Support\Arr; class InvoiceUpdateAction { use AsAction; use HasValidation; public function handle(Invoice $invoice, ActionRequest $request): void { $invoice->update($request->safe()->except('positions')); foreach ($request->validated('positions') as $position) { if ($position['id']) { $invoice->positions()->firstWhere('id', $position['id'])->update(Arr::except($position, 'id')); continue; } $invoice->positions()->create($position); } $invoice->positions()->whereNotIn('id', array_column($request->validated('positions'), 'id'))->delete(); Succeeded::message('Rechnung bearbeitet.')->dispatch(); } }