LoginSignup
3
1

More than 5 years have passed since last update.

CakePHP2のpaginationでORDER BY FIELD

Last updated at Posted at 2017-02-08

任意の方法でソートしたい

今回のお題は上記の通りです。
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 . ')',
); 
?>

参考になれば嬉しく思います。
お後がよろしいようで。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1