モデルから検索結果を取得するときのデータ並び替え方法についてまとめます。
シンプルな並び替え
orderオプションに「カラム ASC or DESC」並び替えできます。
単純にカラムの昇順(ASC)・降順(DESC)を指定する例
//商品データを名前の昇順(ASC)で並び替えて取得
$this->Item->find('all', array('order' => array('Item.name ASC')));
//商品データを名前の降順(DESC)で並び替えて取得
$this->Item->find('all', array('order' => array('Item.name DESC')));
複数カラムを組み合わせた並び替え
組み合わせもカラムを複数指定するだけでできます。
複数カラムを順に指定する例
//商品データを名前の昇順(ASC省略)、更新日の降順(DESC)で並び替えて取得
$this->Item->find('all', array(
'order' => array('Item.name', 'Item.updated DESC')
));
アソシエーションしたモデルを使った並び替え
以下のようにItemにCategoryがバインドされているという前提でならバインドされたモデルのカラムを指定することも可能。
バインドモデルによる並び替え例
//商品データ(Item)と商品カテゴリ(Category)をバインドする
$this->Item->bindModel(
array('belongsTo' => array(
'Category' => array(
'foreignKey' => 'category_id'
)
))
);
//商品データをアソシエーション先の商品カテゴリ名の昇順(ASC)で並び替えて取得
$this->Item->find('all', array('order' => array('Category.name ASC')));
ランダムな並び替え
毎回ランダムなパターンで並び替えたい場合もあるかと思います。
ランダムな並び替え例
//商品データをランダムに並び替えて取得
$this->Item->find('all', array('order' => 'RAND()'));
順番を指定した並び替え
取得したい順番が決まっている場合、データ取得した後でこの並びにソートし直すのは面倒ですので以下のように並び替えることができます。
順番を指定して並び替える例
//商品データを指定したID順に並び替えて取得
//以下の場合、Item.idが24,50,351,142,345,78の順でデータが取得できる
$this->Item->find('all', array(
'order' => 'FIELD(Item.id,24,50,351,142,345,78)'
));