Если у вас есть набор ассоциативно связанных объектов в Doctrine, иногда вам может понадобиться получить эти объекты без сопоставления сопоставленных ассоциаций и замедления запроса вниз.Как получить объекты без их сопоставления ассоциаций в Doctrine 2
Например, у меня есть набор объектов, которые являются ассоциациями, отображаемыми в цепочке связанных таблиц базы данных. Все они являются ассоциациями OnetoMany и действуют как иерархия цен в матрицах на страницах продуктов. Они могут быть представлены в виде так:
SitePage->SiteMatrix->SiteItems->SiteItemPrices.
Связанная отображение прекрасно работает, и когда я использую метод findBy, чтобы получить корневой SitePage объект содержит массивы, которые представляют собой преобразованные объекты вниз по цепочке. Другими словами, объект SitePage содержит все матрицы, содержащие все элементы, содержащие все цены. Все идет нормально.
Моя проблема заключается в том, что каждый раз, когда я получаю список страниц на своем сайте, доктрина идет по всему дереву сопоставления ассоциации и возвращает меня со всей необходимой базой данных, которая очень медленная. Когда-нибудь я хочу просто получить объект SitePage по ID и не содержать всех сопоставленных ассоциаций.
Я посмотрел в ленивую и дополнительную отложенную загрузку ассоциаций, но они, кажется, только воздействуют на определенные функции, а не findBy и т.д. Официальная документация далека от полезного: http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/tutorials/extra-lazy-associations.html
Других подобные вопросы на переполнении стека есть не принимаются: Doctrine 2 Association Mapping Overhead?
Есть ли простой способ получить объект без сопоставленных ассоциаций? Самый простой способ, который я вижу в настоящее время, - создать два объекта для каждой таблицы базы данных: один с сопоставлением ассоциаций и один без использования в отдельных ситуациях, где они необходимы. Мне кажется странным, что вы не можете просто получить сущность и указать, хотите ли вы привязать ее к другим объектам или получить ее самостоятельно.
Благодарим за любую информацию по этому вопросу.
Доктрина должна относиться к ленивым ассоциациям загрузки по умолчанию. Похоже, что все ваши ассоциации настроены на нетерпеливую загрузку. Не могли бы вы добавить код для двух объектов с их сопоставлением ассоциаций, чтобы исключить любые проблемы с ассоциацией? – JimL
Спасибо за ваш ответ, но эта проблема уже более года. Оказалось, что я использовал сериализатор для сериализации моих объектов в массивы, и именно этот сериализатор вызывал каждую функцию getter в дереве сопоставления ассоциаций. Как только я узнал об исключениях, максимальной глубине и функциональности групп в комплекте JMS Serializer, все стало ясно, и я смог использовать связь с гораздо большим контролем. – Asq