2011-12-22 1 views
1

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

ответ

0

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

PS соединение никогда не рассматривалось как опция, потому что сайт является видом высокой нагрузки.

1

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

0

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

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

Смежные вопросы