Tech Racho エンジニアの「?」を「!」に。
  • 開発

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などとの互換性を維持しつつ、望んでいる利便性を確保するには、少し工夫が必要そうですね。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。