我试图通过单击按钮来复制数据,更好的说法是,尝试重新排序先前的订单。这是我的代码
$order = Order::find($id);
$order_details = OrderDetail::where('order_id', $id)->get();
$reorder = $order->replicate();
$reorder_details = $order_details->replicate();
$reorder->save();
$reorder_details->save();
$order
数据可以很好地复制,但是$order_details
数据不能复制,因为出现此错误Method Illuminate\Database\Eloquent\Collection::replicate does not exist.
是否有一种无需使用replicate()
就能复制的方法?
答案 0 :(得分:3)
这是因为$order = Order::find($id);
返回第一个实例(模型),而$order_details = OrderDetail::where('order_id', $id)->get();
返回集合。只需将其更改为$order_details = OrderDetail::where('order_id', $id)->first();
,它将可以正常工作。
要处理多个订单详细信息:
$order_details = OrderDetail::where('order_id', $id)->get()->each(function($item) use($reorder){
$newItem = $item->replicate();
$newItem->order_id = $reorder->id; //If needed, be sure to pass $order if you do
$newItem->save();
});
答案 1 :(得分:0)
您可以使用__clone()
方法,该方法可以在订单类中实现,
然后您可以像这样使用它
$order = Order::find($id);
$newOrder = clone $order;
$newOrder->save();