Doctrine 中的按计数排序

fam*_*s23 5 doctrine symfony doctrine-orm

我有两个通过OneToMany双向关系相关的类。对于每个订阅,都会在订阅表中添加一个新行。我想获得按最大订阅数排序的培训列表。这是我的实体:

培训机构:

class Trainings
{
    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Subscriptions", mappedBy="id_training")
     */
    private $subscriptions_lists;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

订阅实体:

class Subscriptions
{
    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Trainings" , inversedBy="subscriptions_lists")
     * @ORM\JoinColumn(name="id_training", referencedColumnName="id",onDelete="CASCADE")
     */
    private $id_training;
Run Code Online (Sandbox Code Playgroud)

查询生成器:

$trainings = $em->getRepository('AppBundle:Trainings')
    ->createQueryBuilder('t')
    ->innerJoin('t.subscriptions_lists', 'subscription')
    ->orderBy('COUNT(subscription.id)', 'DESC')
    ->getQuery()
    ->getResult();
Run Code Online (Sandbox Code Playgroud)

我收到此异常:

[语法错误] 第 0 行,第 87 列:错误:预期已知函数,得到“计数”

Ale*_*eri 4

您需要在 order by It 之后添加一个包含计数值的字段

尝试这个:

$trainings = $em->getRepository('AppBundle:Trainings')
    ->createQueryBuilder('t');

$trainings->select('t, COUNT(subscription.id) AS mycount')
    ->leftJoin('t.subscriptions_lists', 'subscription')
    ->groupBy('subscription.id_training')
    ->orderBy('mycount', 'DESC')
    ->getQuery()
    ->getResult();
Run Code Online (Sandbox Code Playgroud)