2013-02-22 114 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