persist() et flush() à l'intérieur de la boucle - la Doctrine
Je veux savoir combien de fois les ff: codes fera une roundway voyage à la base de données.
foreach ($recipients as $recipient) {
$received_email = new ReceivedEmail();
$received_email->setRecipient($recipient);
$received_email->setEmail($email);
$entityManager->persist($received_email);
$entityManager->flush();
}
$recipients
est un tableau d'objets Utilisateur avec Un-à-Plusieurs relation avec ReceivedEmail
$email
est un objet avec Un-à-Plusieurs relation avec ReceivedEmail.
Si, par exemple, $recipients
a cinq entités, la boucle génère un total de cinq voyages à la base de données? Ou un seul?
Est l'exemple ci-dessus le plus optimisé de façon à insérer les nouvelles ReceivedEmail dossiers?
Grâce
OriginalL'auteur Edville | 2013-04-18
Vous devez vous connecter pour publier un commentaire.
Il y aura généré un INSERT pour chaque persistent.
Ce qui est plus, vous pouvez afficher uniquement le vôtre instructions SQL pour debug, il suffit de configurer la Doctrine pour l'enregistrement:
https://stackoverflow.com/a/4585421/1815881
Dans votre cas:
Pour plusieurs insertions, vous devriez envisager la lot prcessing:
Espère que j'ai révélé le problème.
vous n'avez pas précisé ce qu'est exactement
flush
.Un
insert
déclaration pour chaquepersist
ne signifie pas qu'il va créer un nouveau dossier pour chaquepersist
. Il va vérifier pour voir si l'objetpersisted
existe déjà, ce qui signifie que vous devez créer un nouvel objet pour chaquepersist
.OriginalL'auteur Athlan