Etkili / akıcı kullanarak tek bir sorgudan birden çok satır ekleme


143

Aşağıdaki sorgu var:

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

ve beklendiği gibi aşağıdaki sonucu elde ediyorum:

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

Tablonun böyle görünmesi için yukarıdaki sonucu başka bir tabloya kopyalamanın bir yolu var mı ?

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

I-si olmak sorun şu $querysatırların herhangi bir sayıda bekleyebilirsiniz ve böylece im bilinmeyen sayıda satır üzerinden yineleme nasıl emin değilim .


Yanıtlar:


292

Eloquent veya sorgu oluşturucuyu kullanarak Laravel'de toplu bir ekleme yapmak gerçekten kolaydır.

Aşağıdaki yaklaşımı kullanabilirsiniz.

$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

Sizin durumunuzda zaten $querydeğişken içindeki veriler var .


7
Nesne koleksiyonunda -> toArray () yöntemini kullanın.
Kreshnik Hasanaj

36
Zaman damgalarını eklemez.
guy_fawkes

20
dizinize 'oluşturulan_at' => tarih ('Ymd Y: i: s'), 'değiştirilen_at' => tarih ('Ymd Y: i: s') ekleyin. Kaynak: stackoverflow.com/a/26569967/1316842
JR Tan

8
Laravel'in bunun için neden 'createMany' gibi bir şeyi olmadığını merak ediyorum.
Abhishek

4
Kimlikleri nasıl alabilirim?
Luvias

21

Eloquent kullanmak

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

Model::insert($data);

insert, sorgu oluşturucu yöntemidir. Erişimci ve mutasyoncular bu kesici uçla çalışmayacak
Hassan Dad Khan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.