Доктрина 1.2. Построение запроса после пользовательского поиска

У меня есть следующая структура таблицы (статьи, категории, отношения):

articles
 >id
 >title
 >body

cats
 >id
 >title

cat_article_relations
 >id
 >cat_id
 >article_id

Теперь я создал страницу, на которой пользователь может выбрать одну или несколько категорий (с помощью флажков). После отправки формы поиска у меня есть массив со всеми выбранными идентификаторами категорий. Теперь моя проблема возникает, когда я пытаюсь загрузить все статьи со всеми выбранными категориями.

Когда используешь:

...    
->leftJoin('a.Cat_article_relations rl')
->andWhere('rl.cat_id = ?', $sg[0])
...

Это работает, потому что я ищу только одну включенную категорию. Как только я добавлю несколько "->andWhere" с циклом по всем идентификаторам моей категории (в массиве, который я получил), он больше не будет работать. Я проверил документацию по Doctrine 1.2 в поисках какого-либо решения, но ничего не нашел. «->whereIn» и подобные не дают результатов, которые я хочу.

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

Информация. Если у вас есть решение для чистого запроса MySQL, мне оно тоже очень поможет. Его не обязательно писать с помощью Doctrine.

Спасибо


person Peter    schedule 04.07.2012    source источник
comment
Не могли бы вы объяснить, почему whereIn неверно в данном случае?   -  person j0k    schedule 04.07.2012
comment
-›whereIn('rl.cat_id',$sg) возвращает все статьи, которые имеют хотя бы одну из выбранных категорий, но я просто хочу получить статьи, которые связаны со всеми категориями в моем массиве.   -  person Peter    schedule 04.07.2012


Ответы (1)


Я не уверен, понимаю ли я отношение, но это следует изменить с:

->leftJoin('a.Cat_article_relations rl')
->andWhere('rl.cat_id = ?', $sg[0])

to

->leftJoin('a.Cat_article_relations rl WITH rl.cat_id=?', $sg[0])
person Zeljko    schedule 05.07.2012