¿Cómo podemos realizar inserciones masivas de bases de datos en Laravel usando Eloquent ORM?
Quiero lograr esto en Laravel: https://stackoverflow.com/a/10615821/600516 pero recibo el siguiente error.
SQLSTATE [HY093]: Número de parámetro no válido: parámetros mixtos con nombre y posicionales.
has_many
relación con tus modelos?Respuestas:
Solo puedes usar
Eloquent::insert()
.Por ejemplo:
fuente
Eloquent
de hecho. Simplemente representa la llamada alQuery\Builder@insert()
método. No hay forma de insertar eficientemente varias filas con Eloquent, ni ofrece ningún método para inserciones masivas.Podemos actualizar la respuesta GTF para actualizar las marcas de tiempo fácilmente
Actualización: para simplificar la fecha podemos usar carbono como sugirió @Pedro Moreira
ACTUALIZACIÓN2: para laravel 5, use en
updated_at
lugar demodified_at
fuente
$now
variable de:$now = Carbon::now('utc')->toDateTimeString();
. Luego, solo utilícelo'created_at' => $now, 'updated_at' => $now
para cada inserción.Carbon
en esta situación? ¿Qué tiene de malodate("Y-m-d H:i:s")
?Para quien lea esto, consulte el
createMany()
método .fuente
Model::createMany()
.Así es como lo haces de una manera más Elocuente,
fuente
Lo busqué muchas veces, finalmente usé personalizado
timestamps
como a continuación:fuente
Eloquent::insert
es la solución adecuada, pero no actualizará las marcas de tiempo, por lo que puede hacer algo como a continuaciónLa idea es agregar created_at y updated_at en toda la matriz antes de insertar
fuente
Desde Laravel 5.7 con
Illuminate\Database\Query\Builder
usted puede usar el método insertUsing.fuente
UserSubscription
es mi nombre de modelo Esto devolverá "verdadero" si se inserta correctamente, de lo contrario "falso"fuente
Quizás una forma más de Laravel de resolver este problema es usar una colección y hacer un bucle insertando con el modelo aprovechando las marcas de tiempo.
EDITAR:
Lo siento por mi mala interpretación. Para la inserción masiva, esto podría ayudar y tal vez con esto pueda hacer buenas sembradoras y optimizarlas un poco.
fuente
Para la inserción de relaciones de categoría, me encontré con el mismo problema y no tenía idea, excepto que en mi modelo elocuente usé Self () para tener una instancia de la misma clase en foreach para registrar múltiples guardados y identificadores de grabing.
sin "$ obj = new Self ()" solo guarda un registro único (cuando $ obj era $ this)
fuente
Problema resuelto ... Alterar tabla para migrar
Solución:
fuente