CakePHP でvarchar型に入った数字を上手にSortする方法
大人の事情により、varchar型のままのフィールドにINTが入っているケース。。
INT型に変えろ とか言わないで。分かっているけど出来ない大人の事情。。
SQLでcastを使う方法もあるようですが、今回はcastを使わず、しかもCakePHPのpagenateSortにも対応出来ちゃう裏技的方法。
virtualFields使えばいいじゃないの!
CakeのvirtualFields使ったことある方ならもう見出しだけでお分かりですね!virtualFieldsを指定して、その子がINTとなるようにしてあげればよいんです。
public $virtualFields = array( 'field' => '(Model.OriginallyFieldNameHere + 0)', );
virtualFieldsで指定したフィールド名でpagenateSortもできました!
echo $this->BootstrapPaginator->sort('Model.field', 'ソート');