Безопасно ли удалять элементы из коллекции Doctrine в цикле foreach?Php

Кемеровские программисты php общаются здесь
Anonymous
Безопасно ли удалять элементы из коллекции Doctrine в цикле foreach?

Сообщение Anonymous »

При использовании Doctrine ORM я вижу рекомендации вызывать toArray() для коллекции перед перебором ее при удалении элементов. Действительно ли это необходимо и почему?
У меня есть объект досье с отношением «один ко многим» к Echeance:

Код: Выделить всё

#[ORM\OneToMany(mappedBy: 'dossier', targetEntity: Echeance::class, orphanRemoval: true)]
private Collection $echeances;
Я хочу удалить все объекты Echeance, у которых нет активного правила. Без toArray():

Код: Выделить всё

foreach ($dossier->getEcheances() as $echeance) {
if (!$this->hasActiveReglement($echeance)) {
$dossier->removeEcheance($echeance);
}
}
Я видел совет, в котором говорилось, что этот шаблон небезопасен, поскольку коллекция изменяется во время итерации. С помощью toArray():

Код: Выделить всё

foreach ($dossier->getEcheances()->toArray() as $echeance) {
if (!$this->hasActiveReglement($echeance)) {
$dossier->removeEcheance($echeance);
}
}
Небезопасно ли удалять элементы из коллекции Doctrine во время ее итерации? Что происходит внутри в этом случае?

Подробнее здесь: https://stackoverflow.com/questions/798 ... reach-loop

Вернуться в «Php»