Laravel 6

Insertion de masse ?

Avatar de CinquièmeDimension
CinquièmeDimension

Salut les amis!

J'aimerai savoir si vous connaissez un moyen de faire une insertion de masse en BDD. J'ai un array de data avec lequel je veux créer des enregistrements.

Pour le moment, je fais quelque chose comme:

foreach($monArray as $data){
    $enregistrement = new Enregistrement;
    $enregistrement->field1 = $data['field1'];
    $enregistrement->field2 = $data['field2'];
    $enregistrement->field3 = $data['field3'];
    $enregistrement->save();
}

Mais ça me faut autant d'appel à la base que de boucle dans mon foreach. Je préfèrerais balancer mon array et que ça me fasse une grosse requête qui me fait tous mes inserts d'un coup. Genre:

$enregistrements = new mass(Engeristrement, $monArray);
$enregistrements->save();

Mais à ma connaissance, ça n'existe pas...

Quelqu'un a une astuce ?

Posté il y a 7 mois
Avatar de nash
nash

salut,

Un simple Model::insert() et le tour est joué

Posté il y a 7 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Merci nash, oui entre temps j'ai fait ça. Une simple recherche google m'a permis de trouver (je ne sais pas comment j'avais fait ma recharche avant ça...).

J'ai divisé mon array en plusieurs dans un array (j'avais 24000 lignes à insérer alors j'ai fait par 5000) et j'ai fait un foreach sur mon array pour faire un insert par array de 5000 lignes. L'insertion me prends désormais dans les 10s au lieu de 5-10 min auparavent :)

Posté il y a 7 mois

Vous ne pouvez pas répondre à ce sujet.