Autour de Laravel

Réutiliser un Request personnalisé dans une boucle

Avatar de KYoann
KYoann

Bonjour à tous.

J'ai une méthode d'un controlleur qui doit inserer en base des données en boucle. Afin de réduire le code dans mon controlleur, j'aimerais réutiliser ma classe equipementStoreRequest à l'intérieur de cette boucle afin de valider chaq'une des itérations et éviter les erreur d'intégrité de base de données.

  1. est ce possible ?
  2. Comment faire ?

En vous remerciant.

Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Dans un même controller, tu peux tout à fait te faire une private function equipementStore(){} et l'appeler dans ta boucle $this->equipementStore(); Là où c'est pas top c'est de faire des dizaines (centaines ?) de requetes...

Je te recommande plutôt de faire un array avec ta boucle et d'utiliser insert https://laravel.com/docs/7.x/queries#inserts Pour faire une grosse requette au lieu de plusieurs petites.

Moi j'ai fait un truc comme ça:

$toInsert = [[]];
$c = 0;

foreach($variables as $variable){
    (!empty($variable[1])) ? $tarif['TF_NUM_PDT'] = $variable[1] : $tarif['TF_NUM_PDT'] = null;
    (!empty($variable[1])) ? $tarif['TF_CODE_TAR'] = $variable[2] : $tarif['TF_CODE_TAR'] = null;
    (!empty($variable[1])) ? $tarif['TF_DIVR_NEVOL'] = $variable[3] : $tarif['TF_DIVR_NEVOL'] = null;
    array_push($toInsert[$c], $tarif);

    if(count($toInsert[$c]) >= 2500){
        $c++;
        $toInsert[$c] = [];
    }
}

foreach($toInsert as $insert){
    DB::table('tarifs')->insert($insert);
}

Pour stocker des tarifs dans un array et limiter mes insert à 2500 lignes. (J'ai peut-être fait des erreurs de copie vu que j'ai largement tronqué mon code) C'est beaucoup plus rapide (il faut absolument que tous les champs soient présents dans chaque ligne d'ou les if (!empty... ))

Avatar de KYoann
KYoann

Salut CinquièmeDimension,

Bien vue, c'est pas déconnant d'appeler une autre méthode de pour le storage à l'unité, du coup le request marchera.

La c'est juste pour quelques dizaines de lignes, mais je prend note de ton astuce de créer un tableau d'insertion.

Vous ne pouvez pas répondre à ce sujet.