So fügen Sie mit eloquent / fließend mehrere Zeilen aus einer einzelnen Abfrage ein


143

Ich habe folgende Frage:

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

und wie erwartet bekomme ich folgendes Ergebnis:

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

Gibt es eine Möglichkeit, das obige Ergebnis in eine andere Tabelle zu kopieren , damit meine Tabelle so aussieht?

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

Das Problem, das ich habe, ist, dass das $queryeine beliebige Anzahl von Zeilen erwarten kann und ich daher nicht sicher bin , wie ich durch eine unbekannte Anzahl von Zeilen iterieren soll.


Antworten:


292

Es ist wirklich einfach, mit Eloquent oder dem Abfrage-Generator eine Masseneinfügung in Laravel durchzuführen.

Sie können den folgenden Ansatz verwenden.

$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

In Ihrem Fall haben Sie die Daten bereits in der $queryVariablen.


7
Verwenden Sie die Methode -> toArray () für die Objektauflistung.
Kreshnik Hasanaj

35
Die Zeitstempel werden nicht eingefügt.
guy_fawkes

20
Fügen Sie 'created_at' => Datum ('Ymd H: i: s'), 'modifiziertes_at' => Datum ('Ymd H: i: s') zu Ihrem Array hinzu. Quelle: stackoverflow.com/a/26569967/1316842
JR Tan

8
Ich frage mich, warum Laravel dafür nicht so etwas wie "createMany" hat.
Abhishek

4
Wie rufe ich die IDs ab?
Luvias

21

mit Eloquent

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

Model::insert($data);

Einfügen ist eine Methode des Abfrage-Generators. Accessor und Mutatoren funktionieren mit dieser Beilage nicht
Hassan Dad Khan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.