【CakePHP3】Tableへクエリーを投げた後に、特定のcolumn情報を[key => value]の配列で返す方法

Bake-with-CakePHP Logo

CakePHP2を嗜んでいる人だとよく間違いやすい実装の1つが今回のお題。

CakePHP3でもつい

find(‘list’)とselect([‘id”, ‘name’])等でやれば [key => value] で返せるだろう

って思ってたら、primary keyであるidはkeyとして返してくれるが、valueはselect()の指定では返してくれない。というわけで、どう実装をすれば良かったかをメモがてら残しておく。検証したCakePHPのバージョンは3.6.13。

実装方法1: find(‘list’)時にkeyFieldとvalueFieldを指定する

一番基本的な記述は下記(L26~L32):

find(‘list’)の際にkeyFieldとvalueFieldを指定する方法。key・valueは好きなcolumnを指定することが可能だ。

実装方法2: 対象Tableのinitialize()にてsetDisplayField()をしておく

もう1つの方法がこちら:

上記のように、initialize()内でsetDisplayField()というメソッドを活用することで、予めfind(‘list’)で取得してくる際のデフォルトvalueを決め打っておく方法だ。[key => value]で返すcolumnがほぼ決まっている場合に効果的。

 

上記のようにsetしておくと、Controller側では下記の記述で事足りるようになる:

非常にスッキリ。

参考)

https://book.cakephp.org/3/ja/orm/retrieving-data-and-resultsets.html#table-find-list