f4b1.com
***

Laravel : Insérer un tableau PHP (bulk insert) dans une base de données avec Eloquent

By Admin on 2017-07-15 13:24:49

Nombre de vues : 15332


Laravel dispose d'un ORM nommé Eloquent qui vous permet de faire de très nombreuses choses avec votre base de données, enfin comme d'habitude insérer, supprimer, lire des données mais avec classe. Pourquoi ? Vous n'êtes plus obligé de renseigner vos requêtes de façon littérale comme vous auriez l'habitude de le faire avec du PHP "classique" et PDO.

Mais ici je n'ai pas la prétention de faire des explications complètes sur les différences entre l'utilisation de PDO et l'ORM Eloquent de Laravel, nous verrons ça dans un article complet sur le sujet.

Nous allons plutôt voir comment insérer un tableau de données, et donc bloc de données en une seule fois plutôt que de faire de multiples INSERT INTO, c'est beaucoup plus performant et si vous avez beaucoup de données à insérer dans une table de votre base de données, c'est forcément beaucoup plus rapide. Certains appellent ça aussi un "volume de données" à insérer ou même un "bulk" pour ceux qui ont l'habitude de parler anglais. J'ai pris l'habitude de procéder de la sorte dans mes gros scripts car le gain de temps est important.

Dans un foreach, on va donc remplir notre tableau $dataset[] qui va alors prendre la forme suivante :

  1. $today = date("Y-m-d H:i:s");
  2. $dataset[] = [
  3. 'colonne1' => $dataforeach1,
  4. 'colonne2' => $dataforeach2,
  5. 'created_at' => $today,
  6. 'updated_at' => $today
  7. ];

Une fois que notre tableau est rempli par les données qui nous intéressent, il faut alors aller insérer notre bulk dans la base donnée. Cela n'est vraiment pas compliqué mais il faut le savoir. Ainsi plutôt que de passer par un foreach pour aller faire nos INSERT INTO un par un, il suffit de faire une fois :

  1. \DB::table('matable')->insert($dataset);

Et le tour est joué, c'est tout !