Подтвердить что ты не робот

В Doctrine 2 можно изменить режим Fetch (Eager/Lazy и т.д.) Во время выполнения?

У меня есть сущности, которые я хотел бы с нетерпением загружать, а также на другие случаи ленивой (или даже лишней ленивой) нагрузки.

Мои сопоставления не имеют режима выборки, объявленного в моем YAML, поэтому они используют стандартную (ленивую загрузку).

В настоящее время единственным способом с нетерпением загрузить является создание DQL вручную - и мне нужно обновлять его каждый раз, когда я добавляю новый объект.

В идеале я просто загружу корневой объект и силу, загружающую все связанные объекты. Есть ли способ сделать это?

Если нет, почему (есть ли причина, выходящая за пределы нереализованной функции)?

4b9b3361

Ответ 1

Если вы хотите использовать встроенные методы репозитория (find(), findAll()), вам, вероятно, не повезло, если вы не настроите вещи на загрузку аннотаций.

Вероятно, вы захотите использовать построитель запросов (или необработанный DQL) в некотором настраиваемом методе репозитория, чтобы принудительно загрузить загрузку там, где вы хотите. Да, вам придется обновлять этот метод при добавлении сущностей, но по крайней мере вы всегда будете знать, что происходит в отношении ленивой/нетерпеливой загрузки, и вам нужно всего лишь поддерживать все это в одном месте.

Я полагаю, причина в том, что не существует флаг $eagerLoad для find() и т.д., потому что это удобные методы для простых задач. Если вы хотите добавить такой флаг, вы бы быстро попали в ситуации, когда вы хотите ограничить рекурсивную интенсивную загрузку по глубине. Вероятно, вам также придется начинать беспокоиться о циклических ссылках (например, в любой двунаправленной ассоциации).