Вы должны настроить ваше отношение как "Ленивый". Смотрите документацию к доктрине:
- ManyToOne
- ManyToMany
- OneToOne
Чем вы сможете его лениво загрузить с помощью $comments->loadPhotos()
, по крайней мере, документация так говорит
ОБНОВЛЕНИЕ: Я думаю, вам не нужно делать что-то особенное, чтобы избежать сброса ваших сущностей в БД. Фактически, когда вы запрашиваете ваши записи с помощью DQL, они имеют состояние managed
, поэтому их присоединение к коллекции другого управляемого объекта не меняет их состояния, поэтому они не сбрасываются, если вы не изменили их.
Но это совсем не помогает, потому что ассоциации извлекаются до первого использования, поэтому добавление объекта в коллекцию с помощью следующего кода приведет к неявному запросу базы данных:
$comment->addPhoto($photo);
//in Comment class
function addPhoto(Photo $photo){
//var_dump(count($this->photos)); //if you have any - they are already here
$this->photos->add($photo);
}
Возможно, если объявить вашу коллекцию общедоступной (или этот трюк с ReflectionProperty
) поможет обмануть Доктрину, но это грязный хак, поэтому я даже не пробовал их.
Отключение родительской сущности также не помогает. У меня пока нет идей ...