Bonjour

Dans mon controller j ai un tableau avec 13235 objets .
Lorsque je fais ça :

        foreach ($cis as $key => $value) {
            $em->persist($value);
            $em->flush();
            $em->clear()
        }

J'ai 2563 lignes sur les 13235 qui se créent dans la base.

Du coup j 'ai essayé de faire le flush moins souvent avec ce code :

        foreach ($cis as $key => $value) {
            $em->persist($value);
            if ($key % 300 == 0) {
                $em->flush();
                $em->clear();
            }
        }
        $em->flush();

Et la peu importe ce que je mets comme chiffre a la place du 300,je n'ai que 4500 enregistrement sur les 13235 en base.

Quelqu 'un aurai une idée d'ou celà peut venir ?? il y a t'il un limitation ?

dans les logs les 4500 lignes sont ecritent en 8 à 9 seconde.

Merci par avance.

1 réponse


android38
Auteur
Réponse acceptée

C'est bon j'ai trouvé la solution.

le code suivant fonctionne très bien des le départ :

foreach ($cis as $key => $value) {
   $em->persist($value);
}
$em->flush();

Il fallait juste augmenter la variable max_allowed_packet.

J'espère que ça en aidera d'autre