2011-10-11 110 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