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