对于addAscendingOrderByColumn,在for propel中将Varchar转换为Integer

时间:2011-11-04 13:35:46

标签: symfony1 integer sql-order-by propel varchar

我有一种方法可以从基于推进的symfony-1.1项目的数据库中获取数据。

现在,用例到达将整数存储到varchar字段中,这导致错误的顺序,例如{1, 17, 5},而不是我期待的数字,即{1, 5, 17}

我知道一种方法是重新设计我的schema.yml,但这不是一种选择。我想知道是否有办法将所述varchar字段转换为整数,而不会损害推进方法。

这是排序功能:

public static function getFooData($column = 'FooPeer::ID', $orderBy = 'asc') {
    //FIXME: Sort varchar fields as integer, needed for FooPeer::REQUESTS

    $c = new Criteria();

    if ($orderBy == 'asc') {
        $c->addAscendingOrderByColumn($column);
    } else {
        $c->addDescendingOrderByColumn($column);
    }

    return FooPeer::doSelect($c);
}

2 个答案:

答案 0 :(得分:4)

怎么样:

$c->addAscendingOrderByColumn('CAST('.$column.' AS UNSIGNED)');

答案 1 :(得分:3)

只是为了感兴趣,您也可以为此编写视图,并在视图而不是表格上构建模型。假设您使用Propel写入表格,此解决方案要求平台支持可写视图(我不确定它们是否都这样做,但也许这个假设已经过时了。)

这通常是一种很好/快速的技巧,你不确定如何在Propel中做某事,或者它真的很尴尬。虽然不是每个纯粹主义者都喝茶,但它已经拯救了我几次。