DQL-запрос с ассоциациями? - PullRequest
4 голосов
/ 11 октября 2011

Я работаю над веб-приложением, в котором есть три объекта: Пользователь, Проект и Todo.

Каждый Тодо имеет много-к-одному отношения с Проектами. У Todos также есть отношение «многие ко многим» с пользователями.

Я пытаюсь получить проекты, которые содержат задачу, назначенную данному пользователю.

Мой код выглядит следующим образом. $ id был установлен в user_id. Я хочу получить проекты для

$em = $this->getDoctrine()->getEntityManager();
$projects = $em->createQuery("SELECT p FROM projects p INNER JOIN p.todos t WITH t.assigned_to = :id")
    ->setParameter('id', $id)
    ->getResult();

Всякий раз, когда я запускаю этот запрос, я получаю следующую ошибку:

[Семантическая ошибка], строка 0, столбец 79 рядом с 'assign_to =': Ошибка: недопустимо PathExpression. StateFieldPathExpression или Ожидается SingleValuedAssociationField.

Есть мысли о том, что я делаю не так? Спасибо.

1 Ответ

6 голосов
/ 11 октября 2011

Обновлен:

Поскольку отношение assign_to является отношением "многие ко многим", указанным в комментариях, фактическое поле для сравнения не назначено.

Вы должны вступить в ассоциацию:

SELECT p 
FROM projects p 
INNER JOIN p.todos t 
INNER JOIN t.assigned_to a
WHERE a.id = :id

Я использую условие WHERE, поскольку это то, к чему я привык, как я узнал от вас, WITH также поддерживается и может работать;)

...