2015-03-03 4 views
0

Я попытался реплицировать строки, но без результатов, я получаю заказы на тиражирование без соответствующих элементов.Laravel 4.2 replicate includes child items

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:58 


ITEMS 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 
       )); 
      } 

ErrorExceptionTrying Response, чтобы получить свойство не-объекта строки $ idnewId = $ idnew-> ид;

Желаемая Выход:

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 

Любые идеи, пожалуйста,

ответ

0

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); 
+0

Благодаря Luka, я стараюсь, что и выполнять querie без ошибок, но не вставки дочерних элементов строк – Userlaravel

+0

Являются ли вы уверены? Пожалуйста, дважды проверьте свой код с моим ответом. Поскольку 'replicate()' обязательно должен возвращать объект (пример модели, если быть точным) – lukasgeiter

+0

да, извините. Я изменил переменную, ошибочно опечатанную. Теперь выполните querie без ошибок, но не вставите строки дочерних элементов. – Userlaravel