在学说

时间:2017-08-08 12:17:32

标签: symfony doctrine-orm doctrine

我有两个通过 OneToMany 双向关系相关的课程。对于每个订阅,新行都将添加到订阅表中。 我想获得按最大订阅号订购的培训清单。这是我的实体:

培训实体:

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

    // ...
}

订阅实体:

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

QueryBuilder的:

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

我遇到了这个例外:

  

[语法错误]第0行,第87行:错误:预期的已知函数,得到'COUNT'

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

您需要添加一个包含计数值的字段,然后按顺序添加

试试这个:

$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();

答案 1 :(得分:0)

你必须选择带别名的计数,隐藏然后你可以按顺序使用它