Cómo insertar varias filas de una sola consulta usando elocuente / fluido


143

Tengo la siguiente consulta:

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

y como esperaba obtuve el siguiente resultado:

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

¿Hay alguna forma de copiar el resultado anterior en otra tabla para que mi tabla se vea así?

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

El problema que tengo es que $querypuede esperar cualquier número de filas y, por lo tanto, no estoy seguro de cómo recorrer en iteración un número desconocido de filas.


en caso de que alguien todavía lo necesite: github.com/laravel/framework/issues/1295#issuecomment-193025045
4givN

Respuestas:


292

Es realmente fácil hacer una inserción masiva en Laravel usando Eloquent o el generador de consultas.

Puede usar el siguiente enfoque.

$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

En su caso, ya tiene los datos dentro de la $queryvariable.


77
Use el método -> toArray () en la colección de objetos.
Kreshnik Hasanaj

35
No inserta las marcas de tiempo.
guy_fawkes

20
agregue 'created_at' => date ('Ymd H: i: s'), 'modified_at' => date ('Ymd H: i: s') en su matriz. fuente: stackoverflow.com/a/26569967/1316842
JR Tan

8
Me pregunto por qué Laravel no tiene algo como 'createMany' para esto.
Abhishek

44
¿Cómo recupero los identificadores?
Luvias

21

usando Eloquent

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

Model::insert($data);

insert es un método de generador de consultas. El acceso y los mutadores no funcionarán con este inserto
Hassan Dad Khan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.