2013-02-22 110 views
1

我在表單中進行查詢。從Symfony2中的2個表中選擇

想法是:現在我有一個所有用戶的下拉列表,好嗎?

我有這樣的查詢:

'query_builder' => function(EntityRepository $er) { 
     return $er->createQueryBuilder('u')->orderBy('u.lastName', 'ASC'); 
    } 

這工作完美無瑕!

而不是顯示所有用戶,我只需要與類別關聯的用戶。該定義位於「user_data」表(user_id + category_id)中。

所以,我需要做的是這樣的:

SELECT * FROM users 
WHERE user_id IN (SELECT user_id FROM user_data WHERE category_id='2') 

我沒有,看起來像的UserData的實體,我只有user.php的,但這個文件中,我發現這一點:

/** 
    *@ORM\ManyToMany(targetEntity="My\Bundle\Entity\Data", inversedBy="users") 
    *@ORM\joinTable(name="user_data") 
    */ 
    protected $datas; 

[...] 

所以我看到的關係是建立,但我不明白如何以建設基礎上,2代表我的查詢使用它...

任何人都可以幫助我解決這個問題? :)

謝謝!

回答

3

試試這個,

'query_builder' => function(EntityRepository $er) { 
    return $er->createQueryBuilder('u') 
       ->innerJoin('u.datas', 'd') 
       ->where('d.category = :category') // Check your Data entity to get the right field name 
       ->setParameter('category', $yourCategoryId) // you could use options here 
       ->orderBy('u.lastName', 'ASC'); 
    } 

此外,更新你所有的實體(數據,...)

+0

我認爲它的工作你的問題......我只是想測試一下它的更多細節。 (然後我會接受答案) 非常感謝@ ahmed-siouani - 只是最後一個問題 - 你能指點我描述這個過程的地方,以便更好地理解它嗎?謝謝! – 2013-02-22 10:14:58

+0

@ Ka7anax不客氣。 但是,您所說的「這個過程被描述」是什麼意思?,你的意思是「[文檔](http://docs.doctrine-project.org/en/2.0.x/reference/query-builder.html) 「?同時檢查[Sf2文檔](http://symfony.com/doc/2.0/book/doctrine.html#using-doctrine-s-query-builder)。 – 2013-02-22 10:25:26

+0

是的!我會在那裏看到......這個想法是我想了解它在Symfony中的所有數據庫查詢方法的工作方式! 我會搜索一個很好的教程來解釋所有這個Entity-Database-Form關係(如何查詢數據庫以便在表單中顯示不同的信息。如果有的話,請不要猶豫分享:) – 2013-02-22 10:30:38