Дублирование данных в контроллере Laravel - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь продублировать данные одним нажатием кнопки, а точнее, изменить порядок предыдущего заказа.Это мой код

$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 ]

3 голосов
/ 23 апреля 2019

Это потому, что $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();
});
0 голосов
/ 23 апреля 2019

Вы можете использовать метод __clone(), который вы можете реализовать внутри класса заказа,

Тогда вы можете использовать это так

$order = Order::find($id);
$newOrder = clone $order;

$newOrder->save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...