laOvel

时间:2017-06-16 17:50:07

标签: php laravel-5

我遇到了sytnax问题。我正在尝试保存属于发票的一系列发票项目。发票包含多个发票项目。问题是我使用此行尝试更新项目但收到错误。

$update->invoiceitem()->save($item);

创建新项目时,它可以正常工作。更新时我不确定我的代码出错了。我正在使用循环数组。这是代码:

$update = Invoice::find($id);
for($i = 0; $i < $count_ids; $i++){         
  $item = $update->invoiceitem; 
  dd($item); //this return the invoice items correctly. 
  $item->rate = $rate[$i];
  $item->total_hours = $hours[$i];
  $item->subtotal = $hours[$i] * $rate[$i]; 
  $item->type = $type[$i];
  $update->invoiceitem()->save($item);
}

模型关系是:

InvoiceItem模型

 public function invoice() {
      return $this->belongsTo(invoice::class);
    }

发票模型

public function invoiceitem() {
  return $this->hasMany('App\InvoiceItem', 'invoice_id', 'id');
}

1 个答案:

答案 0 :(得分:0)

解决方案。

按ID查找需要更新的单个发票项,并在for循环中设置它们。由于这是在一个数组中,[$ i]很重要,因为没有它只会用最后一个数组数据更新第一个记录。

$itemID= $request->itemID; //hidden in input. There are other ways of getting this value. 

for($i = 0; $i < $count_ids; $i++){         
 $item =  InvoiceItem::find($itemID[$i]);
  dd($item); //this return the invoice items correctly. 
  $item->rate = $rate[$i];
  $item->total_hours = $hours[$i];
  $item->subtotal = $hours[$i] * $rate[$i]; 
  $item->type = $type[$i];
 $item->save(); 
}