Доктрина: Выберите элементы, которые относятся к одному или нескольким элементам в отношении многие ко многим - PullRequest
1 голос
/ 17 марта 2010

У меня есть система категорий, которая связана со многими сообщениями. Как выбрать список тех категорий, которые относятся к одному или нескольким сообщениям?

$q = Doctrine_Query::create()
     ->from('Category c')
     ->where('<DONT KNOW WHAT TO WRITE>')
     ->select('c.name');

Ответы [ 2 ]

3 голосов
/ 17 марта 2010

Создать эквивалент этого в DQL:

SELECT c.* 
FROM category c 
INNER JOIN category_post_rel cpr ON c.id = cpr.category_id;

EDIT:

DQL эквивалент:

Doctrine_Query::create()
->select('c.name')
->from('Category c')
->innerJoin('c.Posts');

К сожалению, это также присоединится к таблице Post. Вам следует рассмотреть возможность использования дополнительного поля post_count в Category модели. Его значение должно быть равно количеству отношений категории. Это очень распространенное решение (потому что оно действительно быстрое) для этой и многих других проблем.

0 голосов
/ 17 марта 2010
    ->where('post_id = \'CURRENT_POST\'')

Я не знаю синтаксис Doctrine Query, так что это всего лишь предположение. Замените CURRENT_POST сообщением, которое вы хотите проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...