Сборник доктрин гидратов с другой моделью, чем предложение FROM - PullRequest
1 голос
/ 24 июля 2010

В моем приложении я часто делаю доктринный запрос так:

$coms = Doctrine_Core::getTable('Comment')
->createQuery('c')
->join('c.article a')
->join('a.Writter w')
->where('w.something = ?', $something); 

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

Этот запрос может быть более оптимизирован для соединений в следующем порядке:

$coms = Doctrine_Core::getTable('Writter')
->createQuery('w')
->select('c.*')
->join('w.Article a')
->join('a.Comments c')
->where('w.something= ?', $something); 

Таким образом, количество линий, которыми манипулируют суставы, значительно уменьшено, потому что ограничение на писателя сначала выполняется.

Но с этим кодом я получил ошибку:

В корневом классе запроса (псевдоним w) должно быть выбрано хотя бы одно поле.

Существует ли решение сохранить этот порядок в суставах и получить, наконец, коллекцию доктрин Комментариев ?

Ответы [ 2 ]

1 голос
/ 02 ноября 2010

Вы должны просто добавить объединенную таблицу в список выбора (как сообщает Doctrine в сообщении об ошибке, кстати):

->select('c.*, w.*')
0 голосов
/ 25 июля 2010

нет другого решения, кроме как сохранить ваш первый запрос, нет.Вы всегда получаете коллекцию объекта корневого класса, который вы выбираете, используя getTable ('xyz').Обойти это невозможно.

...