(看起来我解决了自己的问题,如果只有某人可以在更新1 中回答问题并在更新2 中检查我自己的问题解决方案。谢谢。)
尝试使用相关项克隆发票模型。
出现Call to undefined method Illuminate\Database\Query\Builder::associate()
错误。
非常感谢任何帮助!
Invoice.php
public function items(){
return $this->hasMany('App\Item');
}
Item.php
public function invoice(){
return $this->belongsTo('App\Invoice');
}
InvoiceController.php
public function copy(Invoice $invoice){
$copy = $invoice->replicate(['number']);
foreach($invoice->items as $item) $copy->items()->associate($item);
$copy->push();
return redirect('/invoices/' . $copy->id . '/edit')->with('alerts', ['Invoice has been copied']);
}
更新1
我猜,我想出了这一点。在子节点上调用saveMany
之前,应首先保存父克隆模型以接收ID。看起来这里也不能使用push
方法。
我仍然感到困惑,为什么我在这种情况下使用associate
和push
方法......
更新2
原来这个方法没有创建克隆项,相反,它正在更新它试图克隆的那些,这很奇怪......我做的是循环内的replicate
项(复制不存在)在像belongsTo
)这样的关系中。所以我的最终代码是:
public function copy(Invoice $invoice){
$copy = $invoice->replicate(['number', 'url_key']);
$copy->url_key = strtolower(str_random(8));
$copy->save();
foreach($invoice->items as $item) $copy->items()->save($item->replicate(['type_id']));
return redirect('/invoices/' . $copy->id . '/edit')->with('alerts', ['Invoice has been copied']);
}
答案 0 :(得分:0)
您需要调用 save()而不是关联():
$copy->items()->save($item);
或 saveMany(),内部为一组模型调用 save():
$copy->items()->saveMany($invoice->items);