Doctrine 带关联的DQL查询?

Doctrine 带关联的DQL查询?,doctrine,dql,Doctrine,Dql,我正在开发一个webapp,它有三个实体:用户、项目和Todo 每个Todo都与项目有多对一的关系。 TODO与用户之间也存在多对多关系 我试图做的是检索包含已分配给给定用户的todo的项目 我的代码如下$id已设置为我要检索项目的用户\u id $em = $this->getDoctrine()->getEntityManager(); $projects = $em->createQuery("SELECT p FROM projects p INNER JOIN p.t

我正在开发一个webapp,它有三个实体:用户、项目和Todo

每个Todo都与项目有多对一的关系。 TODO与用户之间也存在多对多关系

我试图做的是检索包含已分配给给定用户的todo的项目

我的代码如下$id已设置为我要检索项目的用户\u 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列“assigned_to=”附近:错误:无效 路径表达式。StateFieldPathExpression或 应为SingleValuedAssociationField

有没有想过我做错了什么?谢谢。

更新:

由于分配给关系是注释中指出的多对多关系,因此没有为比较分配实际字段

你必须加入协会:

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

我正在使用WHERE条件,因为这是我习惯的,正如我从您那里了解到的,WHERE条件也得到了支持,可能也会起作用;)

我很肯定WITH子句是受支持的。它可以在列出的一个学说示例中找到。当我将
替换为t.assigned_to=:id“
,并使用一个不使用外键的条件(例如
替换为t.description='Say hi'
)时,查询工作正常。此外,我尝试使用WHERE子句,遇到了同样的问题。@JamesKirkwood hm…您的assigned_to映射是什么?这是多个值的集合还是单个值的集合?分配给可以映射到多个用户,这是一种多对多关系。@JamesKirkwood感谢您的澄清,我更新了我的答案,请尝试一下