CakePHP findの形式

CakePHPのfind自体は使いやすいのですが、返ってくるのが配列で、しかもへんてこな形式なので、結構めんどくさいですよね。

たとえば、Userテーブルでfind(‘all’)すると、

array(
  'User' => array(
    'id' => 1,
    'name' => 'yamada'
  ),
  'User' => array(
    'id' => 2,
    'name' => 'tanaka'
  ),
  'User' => array(
    'id' => 3,
    'name' => 'suzuki'
  ),
);

ですが、

Group hasMany Users の場合、Groupをfindすると、

array(
  'Group' => array(
    'id' => 1,
    'name' => 'Group-A'
  ),
  'User' => array(
    array(
      'id' => 1,
      'name' => 'yamada',
    ),
    array(
      'id' => 2,
      'name' => 'tanaka',
    ),
    array(
      'id' => 3,
      'name' => 'suzuki',
    ),
  ),
);

となり、形式が全然違います。

そのため、配列を引数にとるelementを作って、Viewを効率的にまとめる、という当たり前のことが、非常にやりにくい。
こんなときは仕方ないので、後者の形式が来ることを期待して、前者の形式が来たら、以下のような姑息な手段が有効です。

if (isset($user['User'])) {
  $user+= $user['User'];
}

ほんっと、
Rails → コード書いている時楽しいけど、その後がめんどくさい
Cake → コード書いている時は苦痛だけど、インストールも運用も簡単
ですよね・・・

↑のようなことをTwitterでつぶやいていたら、中の人から、Set::mapやFilterを使うと良いとアドバイスを頂きました。感謝感謝です。
ただ、paginatorなどとの互換性を維持しつつ、望んでいる利便性を確保するには、少し工夫が必要そうですね。

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

baba

ゆとりプログラマー。 高校時代から趣味でプログラミングを初め、そのままコードを書き続けて現在に至る。慶應義塾大学環境情報学部(SFC)卒業。BPS設立初期に在学中から参加している最古参メンバーの一人。Ruby on Rails、PHP、Androidアプリ、Windows/Macアプリ、超縦書の開発などを気まぐれにやる。軽度の資格マニアで、情報処理技術者試験(16区分17回 + 情報処理安全確保支援士試験)、技術士(情報工学部門)、Ruby Programmer Gold、AWSソリューションアーキテクト(アソシエイト)、日商簿記2級、漢検準1級などを保有。

babaの書いた記事

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ