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'
],
]
みたいな感じで書かなくてはならない。
地味にハマりそうなので、頭の片隅に置いておいて下さい!
以上!