Cara menyisipkan beberapa baris dari satu kueri menggunakan fasih / lancar

143

Saya memiliki pertanyaan berikut:

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

dan seperti yang diharapkan saya mendapatkan hasil sebagai berikut:

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

Apakah ada cara menyalin hasil di atas ke tabel lain sehingga meja saya terlihat seperti ini?

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

Masalah yang saya miliki adalah bahwa $querydapat mengharapkan sejumlah baris dan jadi saya tidak yakin bagaimana untuk mengulangi melalui jumlah baris yang tidak diketahui.

Billy
sumber
kalau-kalau ada yang masih membutuhkannya: github.com/laravel/framework/issues/1295#issuecomment-193025045
4givN

Jawaban:

292

Sangat mudah untuk melakukan penyisipan massal di Laravel menggunakan Eloquent atau pembuat kueri.

Anda dapat menggunakan pendekatan berikut.

$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

Dalam kasus Anda, Anda sudah memiliki data dalam $queryvariabel.

Kreshnik Hasanaj
sumber
7
Gunakan metode -> toArray () pada koleksi objek.
Kreshnik Hasanaj
35
Itu tidak memasukkan stempel waktu.
guy_fawkes
20
tambahkan 'Created_at' => date ('Ymd H: i: s'), 'modified_at' => date ('Ymd H: i: s') ke dalam array Anda. sumber: stackoverflow.com/a/26569967/1316842
JR Tan
8
Saya ingin tahu mengapa Laravel tidak memiliki sesuatu seperti 'createMany' untuk ini.
Abhishek
4
Bagaimana cara mengambil id?
Luvias
21

menggunakan Eloquent

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

Model::insert($data);
Vishal Varshney
sumber
masukkan adalah metode pembuat kueri. Accessor dan mutators tidak akan bekerja dengan sisipan ini
Hassan Dad Khan