在Controller Laravel中复制数据

时间:2019-04-23 18:31:51

标签: php mysql laravel laravel-5

我试图通过单击按钮来复制数据,更好的说法是,尝试重新排序先前的订单。这是我的代码

$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()就能复制的方法?

2 个答案:

答案 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();