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