任意の方法でソートしたい
今回のお題は上記の通りです。
CakePHPでpagiantionしたいときにハマりかけたので備忘録として置いておきます。
MySQL
MySQLではORDER BY FIELDを使います。
SELECT team
FROM league
WHERE division = 1
ORDER BY FIELD
(team, "札幌", "仙台", "鹿島", "浦和", "大宮", "柏", "F東京", "川崎", "横浜F", "甲府", "新潟", "清水", "磐田", "G大阪", "C大阪", "広島", "鳥栖");
CakePHP pagination
ここから本題です。
これをCakePHPのpaginationで行います。
<?php
$this->paginate = array(
'order' => 'FIELD(League.team, "札幌", "仙台", "鹿島", "浦和", "大宮", "柏", "F東京", "川崎", "横浜F", "甲府", "新潟", "清水", "磐田", "G大阪", "C大阪", "広島", "鳥栖"),
);
?>
paginationのorderは配列を使って条件を入れるものだと思っていましたが、
配列を使わなくてもいけるんですね。
変数を使う場合
ここでは配列を文字列化してから代入しています。
<?php
$arrayTeams = array("札幌", "仙台", "鹿島", "浦和", "大宮", "柏", "F東京", "川崎", "横浜F", "甲府", "新潟", "清水", "磐田", "G大阪", "C大阪", "広島", "鳥栖");
$strTeams = implode(',', arrayTeams);
$this->paginate = array(
'order' => 'FIELD(Works.id, ' . $strTeams . ')',
);
?>
参考になれば嬉しく思います。
お後がよろしいようで。