2011-10-11 89 views
4

我正在研究一个有三个实体的Web应用程序:User,Project和Todo。带关联的DQL查询?

每个Todo都与项目有多对一的关系。 Todos也与用户有多对多的关系。

我想要做的是检索包含已分配给给定用户的待办事项的项目。

我的代码如下。 $ 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(); 

每当我运行此查询我得到以下错误的USER_ID:

[Semantical Error] line 0, col 79 near 'assigned_to =': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.

任何思考什么我做错了吗?谢谢。

回答

6

更新时间:

由于assigned_to关系是多对多的关系在评论中指出存在的比较没有实际的现场assigned_to。

你必须加入协会:

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

我使用WHERE条件为那是什么,我习惯了,我从你身上学到了WITH还支持并可能工作,太;)

+0

我很确定WITH子句被支持。它可以在[此处]列出的一个学说示例中找到(http://www.doctrine-project.org/docs/orm/2.1/en/reference/dql-doctrine-query-language.html)。当我用一个不使用外键的条件(比如'WITH t.description ='Say hi'“')替换'WITH t.assigned_to =:id”'时,查询就可以正常工作。 –

+0

另外,我也尝试使用WHERE子句并遇到同样的问题。 –

+0

@JamesKirkwood hm ...什么是您的assigned_to的映射?这是多个值或单个值的集合吗? – Max