Я попытался повторить строки, но безрезультатно, я получаю копии заказов без соответствующих элементов.
ORDERS pk(id) auto increment
id total status date
-----+-------------+-----------+-------------
118 899.58 2 2015-03-03 00:18:58
119 38.55 2 2015-03-03 00:18:58ITEMS pk(order_id,product_id) corresponding items childs:
order_id product_id quantity
----------+-------------+----------
118 1115 82
119 8965 12 /// ro replicate$idnew = Order::find($idorder)->replicate()->save(); // create new OK
$idnewId = $idnew->id;/////obtain id of last insert
$itemstemp = DB::table('item')->where('order_id', '=' ,$idnewId)->get();
foreach($itemstemp as $itemte){
DB::table('item')->insert(array(
'order_id' => $itemte->order_id,
'product_id' => $itemte->product_id,
'quantity' => $itemte->quantity
));
}
Ответ ErrorExceptionПопробовать получить свойство необъекта
line $ idnewId = $ idnew-> id;
Желаемый результат:
ORDERS pk(id)
id total status date
-----+-------------+-----------+-------------
118 899.58 2 2015-03-03 00:18:58
119 38.55 2 2015-03-03 00:18:58
120 38.55 2 2015-03-03 00:18:58
ITEMS pk(order_id,product_id) corresponding items childs:
order_id product_id quantity
----------+-------------+----------
118 1115 82
119 8965 12
119 2255 22
120 8965 12
120 2255 22
Любые идеи, пожалуйста
save()
просто возвращает логическое значение, если сохранение сработало или нет. Вместо этого вы должны сделать следующее:
$new = Order::find($idorder)->replicate();
$new->save();
$itemstemp = DB::table('item')->where('order_id', '=' ,$new->id)->get();
// and so on...
Также я думаю, что ваша логика немного ошибочна. Нечто подобное будет иметь для меня больше смысла:
$new = Order::find($idorder)->replicate();
$new->save();
$items = DB::table('item')->where('order_id', $idorder)->get();
$newItems = [];
foreach($items as $item){
$newItems[] = [
'order_id' => $new->id,
'product_id' => $item->product_id,
'quantity' => $item->quantity
];
}
DB::table('item')->insert($newItems);
Других решений пока нет …