如何使用一个SELECT中的一个SELECT来获取控制器,其中一个表中的实体来自另一个表?
例如,如果我有一个表:应用程序和类别(多对多的realation),我想使用一个SELECT获取其类别的所有应用程序。怎么做 ? InnerJoin?
然后我想设置一个这样的数组:
application=>categories
[
[AppName] => [Category1, Category2, Category3],
[AppName] => [Category1, Category2]
]
我试着这样做:
$qb = $em->createQueryBuilder()
->select("name, categories")
->from('ComzettaApplicationsBundle:Application', 'name')
->innerJoin('ComzettaApplicationsBundle:Application', 'categories');
$applicationsEntity = $qb->getQuery()->getResult();
但我不明白它的想法
答案 0 :(得分:1)
我明白了:
该查询有效:
$fields = array('a.Name', 'c.name');
$query = $em->createQueryBuilder();
$query
->select($fields)
->from('ComzettaApplicationsBundle:Application', 'a')
->innerJoin('a.categories', 'c');
$results = $query->getQuery()->getResult();
结果示例:
array (size=3)
0 =>
array (size=3)
'Name' => string 'Google Earth DirectX' (length=20)
'category' => string 'Nowa1' (length=8)
1 =>
array (size=3)
'Name' => string 'Acrobat Reader 10' (length=17)
'category' => string 'nowa2' (length=8)
2 =>
array (size=3)
'Name' => string 'Acrobat Reader 10' (length=17)
'category' => string 'nowa3' (length=8)
答案 1 :(得分:1)
您只需调用实体的存储库,即可获取其相关对象,无需加入:
$this->get('doctrine.orm.entity_manager')->getRepository('ComzettaApplicationsBundle:Application')->findAll();
答案 2 :(得分:0)
你可以这样做:
$qb = $em->createQueryBuilder()
->select("application", "category")
->from('ComzettaApplicationsBundle:Application', 'application')
->join('application.categories', 'category');
$applicationsEntity = $qb->getQuery()->getResult();