Php 如何在Symfony2 Doctrine2中将varchar排序为int?
我有以下代码:Php 如何在Symfony2 Doctrine2中将varchar排序为int?,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我有以下代码: $entity = $em->getRepository('MyBundle:MyEntity') ->createQueryBuilder('q') ->... ->orderBy('q.varcharCol') ->getQuery() ->getResult(); varcharProp是一个varchar列,包含以下值:10、10a、101、20、300、20b、21、200。我想按varcha
$entity = $em->getRepository('MyBundle:MyEntity')
->createQueryBuilder('q')
->...
->orderBy('q.varcharCol')
->getQuery()
->getResult();
varcharProp
是一个varchar列,包含以下值:10、10a、101、20、300、20b、21、200。我想按varcharProp对实体进行排序,但将其转换为整数,我必须在查询中进行排序,因为我限制了结果
在Doctrine2中有可能做这样的事情吗
entity->orderBy('ABS(q.varcharCol)')
还是更改
varcharProp
列类型 最好的方法是添加一个select
,将orderBy
表达式作为隐藏列。我的意思是:
$entity = $em->getRepository('MyBundle:MyEntity')
->createQueryBuilder('q')
->addSelect('ABS(q.varcharCol) AS HIDDEN foo')
->...
->orderBy('foo')
->getQuery()
->getResult();
多亏了@Qoop和@eggyalNope,
字符串的预期结尾得到了“(”
,使用ABS
Ah时出现了相同的错误。如果将表达式添加到选择列表中,并使用别名列名,则可以orderBy()
别名。我如何使用createQueryBuilder
做到这一点?我的意思是,可以同时选择所有列和表达式?我知道你说这不可能,但我模糊地记得做过类似的事情。我使用了一个->addSelect('BLAH(BLAH BLAH)作为隐藏的东西')
,这意味着我可以按“某物”排序在还没拿到物品的时候。太好了!谢谢!