2012-07-04 1 views
0

У меня есть следующие таблицы (статьи, категория, связь) структура:Doctrine 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 запросов это было бы большим подспорьем для меня тоже. Его не нужно писать с Доктриной.

Благодаря

+0

Не могли бы вы объяснить, почему 'whereIn' неправильно в этом дело? – j0k

+0

-> whereIn ('rl.cat_id', $ sg) возвращает все статьи, имеющие хотя бы одну из выбранных категорий, но я просто хочу получить статьи, которые находятся в связи со всеми категориями в моем массиве. – Peter

ответ

0

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

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

в

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