Sql symfony 2和条令,按另一个表中的joned记录数选择表中的行

Sql symfony 2和条令,按另一个表中的joned记录数选择表中的行,sql,symfony,orm,doctrine-orm,Sql,Symfony,Orm,Doctrine Orm,基本上我有一张table1表和Table2表 一对多的关系 所以我想做一个选择 $em->createQueryBuilder() ->select('t1') ->from('AcmeAppBundle:Table1', 't1') ->orderBy('t1.id', 'DESC') ->getQuery()->getResult(); 所以我需要相同的查询,

基本上我有一张table1表和Table2表

一对多的关系

所以我想做一个选择

$em->createQueryBuilder()
            ->select('t1')
            ->from('AcmeAppBundle:Table1', 't1')
            ->orderBy('t1.id', 'DESC')
            ->getQuery()->getResult();
所以我需要相同的查询,但我需要按照表2中记录的数量进行排序 关系在实体中设置为

* @ORM\OneToMany(targetEntity="Table2", mappedBy="something")
在原始查询中,它看起来像

SELECT table1.*  FROM table1 left join table2 on table1.id = table2.table1_id
                                group by (table2.table1_id)

像这样的东西。但未测试。

这将根据表2中的记录数对结果进行排序:

    $queryBuilder = $entityManager->createQueryBuilder()
            ->select('t1, COUNT(t2.id) AS myCount')
            ->from('AcmeAppBundle:Table1', 't1')
            ->leftJoin('t1.fields', 't2') //fields is the one to many field name for the target entity AcmeAppBundle:Table2
            ->groupBy('t1.id')
            ->orderBy('myCount', 'DESC');
    $result = $queryBuilder
                    ->getQuery()->getResult();
   $qb = $em->createQueryBuilder();

   $qb
    ->select('count(t2.id) count')
    ->from('AcmeAppBundle:Table1', 't1')
    ->join('AcmeAppBundle:Table1', 't2', 'WITH', 't1.id = t2.table1_id')
    ->orderBy('count', 'DESC')
    ->groupBy('t1.id');
    $queryBuilder = $entityManager->createQueryBuilder()
            ->select('t1, COUNT(t2.id) AS myCount')
            ->from('AcmeAppBundle:Table1', 't1')
            ->leftJoin('t1.fields', 't2') //fields is the one to many field name for the target entity AcmeAppBundle:Table2
            ->groupBy('t1.id')
            ->orderBy('myCount', 'DESC');
    $result = $queryBuilder
                    ->getQuery()->getResult();