Eloquent / Fluentを使用して単一のクエリから複数の行を挿入する方法


143

次のクエリがあります。

  $query = UserSubject::where('user_id', Auth::id())->select('subject_id')->get();

予想どおり、次の結果が得られます。

[{"user_id":8,"subject_id":9},{"user_id":8,"subject_id":2}]

上記の結果を別のテーブルにコピーして、テーブルが次のようになるようにする方法はありますか?

ID|user_id|subject_id
1 |8      |9
2 |8      |2

私が抱えている問題は、$queryが任意の数の行を期待できるため、不明な数の行を反復処理する方法が不明であることです。


誰かがまだそれを必要とする場合:github.com/laravel/framework/issues/1295#issuecomment-193025045
4givN

回答:


292

Eloquentまたはクエリビルダーを使用して、Laravelで一括挿入を行うのは本当に簡単です。

次のアプローチを使用できます。

$data = [
    ['user_id'=>'Coder 1', 'subject_id'=> 4096],
    ['user_id'=>'Coder 2', 'subject_id'=> 2048],
    //...
];

Model::insert($data); // Eloquent approach
DB::table('table')->insert($data); // Query Builder approach

あなたの場合、$query変数内にすでにデータがあります。


7
オブジェクトコレクションで-> toArray()メソッドを使用します。
Kreshnik Hasanaj

35
タイムスタンプは挿入されません。
guy_fawkes

20
'created_at' => date( 'Ymd H:i:s')、 'modified_at' => date( 'Ymd H:i:s')を配列に追加します。出典:stackoverflow.com/a/26569967/1316842
JR Tan

8
Laravelがこのための「createMany」のようなものを持っていないのはなぜですか。
Abhishek 2016

4
IDを取得するにはどうすればよいですか?
Luvias

21

Eloquentの使用

$data = array(
    array('user_id'=>'Coder 1', 'subject_id'=> 4096),
    array('user_id'=>'Coder 2', 'subject_id'=> 2048),
    //...
);

Model::insert($data);

insertはクエリビルダーのメソッドです。アクセサーとミューテーターはこの挿入では機能しません
Hassan Dad Khan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.