我正在尝试通过教义的查询生成器在MySQL上使用自然排序。但是orderBy()函数没有我需要的参数。
这是我需要传递给原则的查询:
SELECT * FROM `ouvidoria`
ORDER BY CAST(RIGHT(`id`, LENGTH(`id`)-3) AS UNSIGNED) DESC;
我尝试了以下操作:
public function getLastKeyOfOrigin($origin) {
$data = $this->getRepository()->findOneBy(['origin'=>$origin->getId()]);
$select = $this->em->createQueryBuilder();
$select->select('o')
->from($this->entityPath, 'o')
->where("o.origin = :origin")
->setParameter('origin', $origin)
->orderBy('CAST(RIGHT(o.id, LENGTH(o.id)-3) AS UNSIGNED)', 'DESC')
->setMaxResults('1');
return $select->getQuery()->getOneOrNullResult();
}
wich出现以下错误:
类型:教义\ ORM \ Query \ QueryException 消息:[语法错误]行0,列79:错误:预期的已知功能,获取了“ CAST”
答案 0 :(得分:0)
您可以这样做:
$select->select('o')
->from($this->entityPath, 'o')
->where("o.origin = :origin")
->setParameter('origin', $origin)
->addSelect('CAST(RIGHT(o.id, LENGTH(o.id)-3) AS UNSIGNED) AS HIDDEN orderCol')
->orderBy('orderCol', 'DESC')
->setMaxResults('1');
因此,您可以使用在其他位置定义的别名来简化orderBy()
,这有助于您克服其局限性。
答案 1 :(得分:0)
我通过按两列对查询进行排序来解决了这个问题,但是回答了这个问题,您可以使用教义的NativeQuery类通过教义发送裸SQL。