Безопасно ли удалять элементы из коллекции 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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