Как собрать все левые данные и отфильтровать данные в одном доктрине? - PullRequest
0 голосов
/ 21 февраля 2011

Я хочу иметь возможность сузить свои сообщения в блоге до сообщений, которые содержат определенный тег. Но для каждого сообщения в блоге, содержащего определенный тег, я хочу получить всех тегов в одном запросе. Итак, используя этот запрос:

BlogTable::getInstance()
    ->createQuery()
    ->select('b.*, t.*')
    ->from('Blog b')
    ->leftJoin('b.Tags t')
    ->where('t.content = ?', $tag)
    ->execute()

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

Как сузить записи в блоге по тегу, но в то же время получить все теги для сообщения в одном запросе?

1 Ответ

1 голос
/ 21 февраля 2011

Вы хотите два внутренних соединения, одно для гарантии того, что конкретный тег существует (t1 в моем образце) и одно для возврата всех существующих тегов (t2 в моем образце).

BlogTable::getInstance()
    ->createQuery()
    ->select('b.*, t2.*')
    ->from('Blog b')
    ->InnerJoin('b.Tags t1')
    ->InnerJoin('b.Tags t2')
    ->where('t1.content = ?', $tag)
    ->execute()
...