我有两个通过 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;
$trainings = $em->getRepository('AppBundle:Trainings')
->createQueryBuilder('t')
->innerJoin('t.subscriptions_lists', 'subscription')
->orderBy('COUNT(subscription.id)', 'DESC')
->getQuery()
->getResult();
我遇到了这个例外:
[语法错误]第0行,第87行:错误:预期的已知函数,得到'COUNT'
任何帮助都将不胜感激。
答案 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)
你必须选择带别名的计数,隐藏然后你可以按顺序使用它