我有一种方法可以从基于推进的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);
}
答案 0 :(得分:4)
怎么样:
$c->addAscendingOrderByColumn('CAST('.$column.' AS UNSIGNED)');
答案 1 :(得分:3)
只是为了感兴趣,您也可以为此编写视图,并在视图而不是表格上构建模型。假设您使用Propel写入表格,此解决方案要求平台支持可写视图(我不确定它们是否都这样做,但也许这个假设已经过时了。)
这通常是一种很好/快速的技巧,你不确定如何在Propel中做某事,或者它真的很尴尬。虽然不是每个纯粹主义者都喝茶,但它已经拯救了我几次。