Laravel 5.4 updateOrCreate 不起作用

Laravel 5.4 updateOrCreate doesnt work

我有:

InvoiceInvoiceitems 模型 hasManybelongsTo 彼此的关系。发票可以有多个发票项目,一个发票项目将只属于它的发票。基本款。

情况: 创建工作正常。但是,当我尝试使用标准 createOrUpdate 更新现有发票时,会发生以下情况。

  1. 如果没有创建新行,它会更新现有的发票。
  2. 如果我添加了新的发票项目,它会给出 Undefined index: id 错误。

这就是我使用 createOrUpdate 的方式:

$invoice->update($invoiceRequest->except('items'));

foreach($items as $item) {
        $invoice->invoiceitem()->updateOrCreate(['id'=> $item['id']],$item);
}

我到底错过了什么?

下面是我的 $items 的样子

 {
 "id": "1",
 "invoiceable_id": "3",
 "fiscal_id": "2",
 "itemdue": "2018-01-19",
 "description": "a",
 "amount": "1000"
 },
 {
 "id": "2",
 "invoiceable_id": "2",
 "fiscal_id": "2",
 "itemdue": "2018-01-20",
 "description": "b",
 "amount": "1000"
 },
 {
 "id": "3",
 "invoiceable_id": "3",
 "fiscal_id": "2",
 "itemdue": "2018-01-19",
 "description": "c",
 "amount": "1200"
 },
 {
 "invoiceable_id": "1",
 "fiscal_id": "1",
 "itemdue": "2018-01-24",
 "description": "renewals",
 "amount": "100"
 }

应更新带有 ID 的项目,最后一个项目(没有 ID)应创建为新行。有人请让我知道我到底在哪里失踪。如果您需要更多信息,请告诉我

$items 中的最后一个元素没有 id:

{
    "invoiceable_id": "1",
    "fiscal_id": "1",
    "itemdue": "2018-01-24",
    "description": "renewals",
    "amount": "100"
}

这就是 $item['id'] 给您错误的原因。

您可能想用这样的方式检查数据:

if (isset($item['id']))