Ist es sicher, Elemente aus einer Doctrine Collection zu entfernen, während diese in einer foreach-Schleife durchlaufen Php

PHP-Programmierer chatten hier
Anonymous
 Ist es sicher, Elemente aus einer Doctrine Collection zu entfernen, während diese in einer foreach-Schleife durchlaufen

Post by Anonymous »

Ich arbeite mit Doctrine ORM und sehe oft Empfehlungen, toArray() für eine Sammlung aufzurufen, bevor beim Entfernen von Elementen darüber iteriert wird.
Ich würde gerne verstehen, ob dies wirklich notwendig ist und warum.
Kontext
Ich habe eine Dossier-Entität mit einer OneToMany-Beziehung zu Echeance:

Code: Select all

#[ORM\OneToMany(mappedBy: 'dossier', targetEntity: Echeance::class, orphanRemoval: true)]
private Collection $echeances;
Ich möchte alle Echeance-Entitäten entfernen, die kein aktives Reglement haben.
Code ohne toArray()

Code: Select all

foreach ($dossier->getEcheances() as $echeance) {
if (!$this->hasActiveReglement($echeance)) {
$dossier->removeEcheance($echeance);
}
}
Ich habe Hinweise gesehen, dass dieses Muster unsicher sein kann, da die Sammlung während der Iteration geändert wird.
Alternative Version mit toArray()

Code: Select all

foreach ($dossier->getEcheances()->toArray() as $echeance) {
if (!$this->hasActiveReglement($echeance)) {
$dossier->removeEcheance($echeance);
}
}
Fragen:
  • Ist es tatsächlich unsicher, Elemente aus einer Doctrine Collection zu entfernen, während man darüber iteriert?
Ich würde gerne verstehen, was in diesem Fall intern passiert.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post