Posted at

【CakePHP3】配列でデータを取得したい

More than 1 year has passed since last update.

備忘録として

CakePHPでデータを取り扱う時に扱いやすいようにtoArray()を使ってオブジェクトを配列にして取得することが多いと思います。

$query->toArray()で取得した場合

[
(int) 0 => object(Common\Model\Entity\Hoge) {

'id' => (int) 1,
'name' => 'hoge',
},
(int) 1 => object(Common\Model\Entity\Hoge) {

'id' => (int) 2,
'name' => 'poge',
}
]

このままでもいいんですが、取得データを個々に一括で使いたいってなった場合、for文が増えてしまって見栄えが悪かったり、取り扱い方に困ったりすることがあったので、いい感じの方法を教えていただきました。

https://book.cakephp.org/3.0/ja/orm/retrieving-data-and-resultsets.html#finder

これによると、変換 (hydrate) を無効化すれば、素となる配列を取得することができます。

$query->enableHydration(false);

// 3.4.0 より前は
$query->hydrate(false);

$query->enableHydration(false)->toArray()で取得した場合は以下のように取得できます。

$query->enableHydration(false)->toArray()の場合

[
(int) 0 => [
'id' => (int) 1,
'name' => 'hoge',
],
(int) 1 => [
'id' => (int) 2,
'name' => 'poge',
]
]

これにHashなどを組み合わせると、idのみの配列を作成するなどの処理が気持ち短くかけるかな〜と思います。