Как изменить ленивость модели во время выполнения в Symfony? - PullRequest
1 голос
/ 23 декабря 2011

Я использую sfPropelORMPlugin. Lazyload - это нормально, если я оперирую одним объектом на веб-странице. Но если их сотни, я получаю сотни отдельных запросов к БД. Я бы хотел полностью отключить lazyload или отключить его для нужных столбцов на этих особенно тяжелых страницах, но пока не смог найти способ.

Ответы [ 3 ]

1 голос
/ 23 декабря 2011

Вы должны join все ваши отношения при построении запроса, таким образом вы получите все данные в одном запросе Обратите внимание, вы должны использовать joinWithRelation(), где Relation - это имя связанной таблицы.

0 голосов
/ 28 февраля 2012

Добавлен метод утилиты для пиринга, чтобы можно было установить, какие столбцы я хочу загрузить. Использование «псевдостолбцов» для этого типа запросов к БД. Также я переопределил гидрат (), чтобы понять эту «разметку». Все было хорошо до тех пор, пока я не узнал, что, хотя данные являются гидратированными, Symfony не поймет их и не позволит использовать их по назначению.

PS объединение никогда не рассматривалось как вариант, поскольку сайт сильно загружен.

0 голосов
/ 26 декабря 2011

Развивая ответ Уильяма Дюрана, возможно, вам также следует взглянуть на функцию Propel doSelectjoinAll (), которая должна предварительно загружать все объекты, связанные с вашими отношениями. Просто имейте в виду, что это может быть дорого, так как это относится к памяти.

Другой метод - создание пользовательских критериев с необходимыми соединениями, а затем использование метода гидратов вручную для добавления к базовому объекту. Я делаю это часто, когда в данных, которые мне нужны, используются агрегаты или другие столбцы, которые не совсем точно сопоставлены с объектами. Есть много примеров использования гидрата ().

...