Как вставить данные в таблицу, а затем использовать последний сохраненный идентификатор для вставки в другую таблицу - PullRequest
0 голосов
/ 29 марта 2019
public function postBomCopy(Request $request){ 

   $bom_id = $request->bom_id;       

   $total  = $request->total_cost;

   //insert the bom name first to get the new bom_id
   $bom = new Bom();
   $bom->cost=20;
   $bom->name=$request->bom;        
   $bom->save();        

    //get the new BOM DETAILS
   $new_bom_id = Bom::where('name', $bom->name)->orderBy('id', "DESC")
    ->first();        
   $n_bom_d = $new_bom_id->id; 

   foreach ($request->item as $key=> $v) { 
    $bom_new_id = new Bom_list();
    $bom_new_id ->bom_id = $n_bom_d;

    $data = array(
                 'item_id' => $request->item[$key],
                 'qty' => $request->item[$key],
                 'unit_cost' => $request->item[$key],
                 'total_cost' => $request->item[$key]
             );

   $bom_copy = $bom->bomList()->save($data); 
  } 


 Session()->flash('success','BOM successfully copied');
 return redirect()->back();
}

это ошибка, которую я получаю.

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_RECOVERABLE_ERROR) Аргумент 1, передаваемый в Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany :: save () должен быть экземпляром Illuminate \ Database \ Eloquent \ Model, заданный массив, вызываемый в C: \ xampp \ htdocs \ PrimeCartonInventory \ app \ Http \ Controllers \ UsersController.php в строке 663

Ответы [ 3 ]

1 голос
/ 29 марта 2019

Чтобы устранить данную ошибку, вы должны передать красноречивый объект Bom_list.

правильный путь: $ bom_copy = $ bom-> bomList () -> save (новый Bom_list ($ data));

И вы получите последний идентификатор при вызове метода save ()

//insert the bom name first to get the new bom_id
   $bom = new Bom();
   $bom->cost=20;
   $bom->name=$request->bom;        
   $bom->save();
   dd($bom->id); // will get the id of bom object u inserted in db

Другим хорошим способом может быть сохранение всех собранных данных и их последующая вставка в дБ.

   $bom = new Bom();
   $bom->cost=20;
   $bom->name=$request->bom;        
   $bom->save();        

   $bom_list_collection = collect();

   foreach ($request->item as $key=> $v) { 
     $data = array(
                 'bom_id' => $bom->id,
                 'item_id' => $request->item[$key],
                 'qty' => $request->item[$key],
                 'unit_cost' => $request->item[$key],
                 'total_cost' => $request->item[$key]
             );
     $bom_list_collection ->push(new Bom_list($data));
   } 
   $bom_copy = $bom->bomList()->saveMany($data);

Ссылка на ссылку: https://laravel.com/docs/5.8/eloquent-relationships#one-to-many

0 голосов
/ 29 марта 2019

Вы должны закодировать массив как строку и попытаться сохранить

foreach ($request->item as $key=> $v) { 
    $bom_new_id = new Bom_list();
    $bom_new_id ->bom_id = $n_bom_d;

    $data = array(
                 'item_id' => $request->item[$key],
                 'qty' => $request->item[$key],
                 'unit_cost' => $request->item[$key],
                 'total_cost' => $request->item[$key]
             );

   $data_new=json_encode($data);
   $bom_new_id->bom_list=$data_new;
   $bom_copy = $bom_new_id->save(); 
  } 
0 голосов
/ 29 марта 2019

Последний идентификатор вставки таблицы бомб.

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