CakePHP3 で、大文字と小文字を区別せずにsort する方法
大文字と小文字を区別せずにsort したかった。
まずは例。
例1
| id | fruits |
|---|---|
| 1 | Apple |
| 2 | Orange |
| 3 | Peach |
| 4 | apple |
| 5 | orange |
| 6 | peach |
View で例1 みたいな感じに並んでいたとする。
これを
例2
| id | fruits |
|---|---|
| 1 | Apple |
| 4 | apple |
| 2 | Orange |
| 5 | orange |
| 3 | Peach |
| 6 | peach |
例2 みたいにしたい!
ということで、調べた。(教えてもらった)
方法は、
view側。つまりhoge.ctpで、
$this->paginator->sort('lower(fruits)')
と書く。
lower() で、 全部小文字に変換してからSELECTしているらしい(SQLの話)
その後、Controller 側で、
$paginate = [
// 'limit' => 10,
'sortWhitelist' => [
'lower(fruits)'
],
]
という感じで sortWhitelist という配列に lower(fruits) という文字列を突っ込む!
sortWhitelistに関しては、こちらを参照!
これにて完成!
ちなみに、 sortWhitelist を使うときは、
sort の対象となる文字列を全部突っ込まなくてはならないらしい。
つまり、初期条件としてid 降順を指定する場合、
$paginate = [
// 'limit' => 10,
'order' => ['id' => 'asc'],
'sortWhitelist' => [
'lower(fruits)', 'id'
],
]
みたいな感じで書かなくてはならない。
地味にハマりそうなので、頭の片隅に置いておいて下さい!
以上!