2016-04-14 16 views
0

こんにちは私はそれに割り当てられた複数のユーザーを持つことができるテーブル(プロジェクト)があります。新しいプロジェクトを作成するとき、私は選択されたユーザーをユーザーのIDと作成されたproject_idを持つリンクテーブルに挿入する必要があります。現時点でLaravel複数のレコードを非配列変数に挿入する

$project = new Project; 
    $project->project_name = $request->project_name; 
    $project->expected_start_date = $request->expected_start_date; 
    $project->expected_end_date = $request->expected_end_date; 
    $project->project_desc = $request->project_desc; 
    $project->client_id = $request->client_id; 
    $project->save(); 

    foreach($request->user_id as $user){ 
     $link_project_user = new link_project_user; 
     $link_project_user->user_id = $user; 
     $link_project_user->project_id = $project->id; 
     $link_project_user->save(); 
    } 

は、私は、選択したユーザのをループし、それぞれの新しいユーザーを作成し、プロジェクトを作成し、$プロジェクト - >のidを経由してIDを取得しています。

しかしこれは、理論的にはデータベースに対して複数のクエリを実行するため、やや効率が悪いようです。上記インサートを実装する最も効果的で最適な方法は何でしょうか。

私はもともとユーザーの配列を渡そうとしていましたが、これはプロジェクトIDの配列を必要としました。

答えて

0

このように一括挿入を行うことができます。

$project = new Project; 
$project->project_name = $request->project_name; 
$project->expected_start_date = $request->expected_start_date; 
$project->expected_end_date = $request->expected_end_date; 
$project->project_desc = $request->project_desc; 
$project->client_id = $request->client_id; 
$project->save(); 

$lpus = []; 

foreach($request->user_id as $user){ 
    $link_project_user["user_id"] = $user; 
    $link_project_user["project_id"] = $project->id; 
    $lpus[] = $link_project_user; 
} 

link_project_user::insert($lpus); 
+1

シンプルなエレガントなソリューションです、ありがとうございます!私はこれを考えていましたが、Laravelの機能が組み込まれている可能性があると思いました。 –

関連する問題