public function addProductItems(array $arrItems = []) { foreach ($arrItems as $itemData) { $item = new Item($itemData); $product = Product::find($itemData['product_id']); $item->product()->associate($product); /** |---------------------------------------------- | There are two ways to add item to an invoice. | 1. $this->items()->save($item); | 2. $item->invoice()->associate($this); | $item->save(); |---------------------------------------------- */ $item->invoice()->associate($this); /***********************************************/ if (!empty($itemData['id'])) { unset($itemData['id']); } $item->updateOrCreate(['product_id' => $product->id, 'invoice_id' => $this->id], $itemData); } return $this; }