Это, вероятно, не конец света.Если Foo :: bars загружен, был изменен и не был передан обратно в базу данных, ваш единственный вариант - выполнить итерацию.
Если Foo :: bars не был загружен, то он, конечно, не был изменен, так что вы также можете запросить базу данных.
(Наконец, если бары были загружены,измененный и зафиксированный, размер коллекции баров будет решать, будет ли выборка или итерация лучше, вероятно)
Мне интересно, есть ли у сущности способ узнать, является ли член коллекциейбыл загружен или нет.
Документация , кажется, подразумевает, что Proxied ArrayCollection (Foo: bars, в вашем примере), будет не передать instanceof ArrayCollection
тестовое задание.Таким образом, вы можете попытаться стать умным, как:
class Foo {
public function getActiveBars(){
if ($this->bars instanceof \Doctrine\Common\Collection\ArrayCollection){
//get active bars by iterating over $this->bars
}else{
//get active bars by DQL, and avoid loading $this->bars (for now).
}
}
}