2011-11-04 64 views
1

所以我寫了一個小方法來從基於propel的symfony-1.1項目的數據庫中獲取一些數據,並且所有的都很簡單,很棒,很整齊。Cast Varchar as propel for Intepeng for addAscendingOrderByColumn

但是有人極其沮喪地決定將一個整數存儲到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); 
} 

回答

4

什麼:

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

非常感謝。這工作。如果我可以的話,我會鼓勵你;) – k0pernikus

3

只是爲了興趣,你還可以這樣寫了這個觀點,並建立在視圖的頂部模型而不是桌子。假設你使用Propel寫了一個表,這個解決方案需要平臺支持可寫視圖(我不確定他們都這樣做了,但也許這個假設已經過時了)。

這通常是一種很好的/快速的技巧,你不知道如何在Propel中做些什麼,或者它真的很尷尬。它爲我節省了幾次,儘管這不是每個純粹主義者的一杯茶。