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和@eggyal

Nope,
字符串的预期结尾得到了“(”
,使用
ABS
Ah时出现了相同的错误。如果将表达式添加到选择列表中,并使用别名列名,则可以
orderBy()
别名。我如何使用
createQueryBuilder
做到这一点?我的意思是,可以同时选择所有列和表达式?我知道你说这不可能,但我模糊地记得做过类似的事情。我使用了一个
->addSelect('BLAH(BLAH BLAH)作为隐藏的东西')
,这意味着我可以按“某物”排序在还没拿到物品的时候。太好了!谢谢!