我有以下查询:
$queryBuilder = $em->createQueryBuilder()->select('s')
->from("MainBundle:Style", 's')
->select('DISTINCT s')
->leftJoin('s.pictureStyle', 'ps')
->leftJoin('ps.picture', 'p')
->leftJoin('p.category', 'pc');
if ($category instanceof InstagramTopCategory)
{
$queryBuilder->leftJoin('pc.pictureTopCategory', 'category');
}
else if ($category instanceof InstagramFirstLevelCategory)
{
$queryBuilder->leftJoin('pc.pictureFirstLevelCategory', 'category');
}
else if ($category instanceof InstagramSecondLevelCategory)
{
$queryBuilder->leftJoin('pc.pictureSecondLevelCategory', 'category');
}
$query = $queryBuilder->where('category = :category')
->andWhere('p.isLocked = 0')
->andWhere('p.deletedAt IS NULL')
->orderBy('COUNT(p.id)', 'DESC')
->groupBy('ps.pictureStyle')
->setParameter('category', $category)
->setMaxResults(10)
->getQuery();
然而按照顺序,它不会给我一个错误:
Error: Expected end of string, got '('
这怎么可能?我在MySQL中使用COUNT直接在orderBy中编写了一个等效查询,它工作得很好,这是一个问题吗?
修改 100%确定它是订单,因为如果我删除该行错误消失
答案 0 :(得分:2)
按如下方式修改您的查询
$queryBuilder = $em->createQueryBuilder()
->select('s')
->from("MainBundle:Style", 's')
->select('DISTINCT s')
->addSelect('COUNT(p.id) as HIDDEN c_id')
[...]
->orderBy('c_id', 'DESC')
[...]