¿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_manyrelación con tus modelos?Respuestas:
Solo puedes usar
Eloquent::insert().Por ejemplo:
fuente
Eloquentde 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_atlugar demodified_atfuente
$nowvariable de:$now = Carbon::now('utc')->toDateTimeString();. Luego, solo utilícelo'created_at' => $now, 'updated_at' => $nowpara cada inserción.Carbonen 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
timestampscomo a continuación:fuente
Eloquent::insertes 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\Builderusted puede usar el método insertUsing.fuente
UserSubscriptiones 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