久しぶりにcakePHPの記事。
cakePHPではアソシエーションという、テーブルとテーブルの関連付け機能を核にもっていて、なかなか便利です。
- 「ユーザー(User)」は「プロフィール(Profile)」を一つだけ持つ
- 「ユーザー(User)」はお気に入りの「曲(Music)」をたくさん持つ
- 「ユーザー(User)」はお気に入りの「アーティスト(Artist)」をたくさん持つ
- 「ユーザー(User)」はお気に入りの「映画(Movie)」をたくさん持つ
- 「曲(Music)」は提供する「アーティスト(Artist)」を一つだけ持つ
このような構造を設定できるので、「ユーザー(User)」情報を取得した時に、関連する「プロフィール(Profile)」、「曲(Music)」、「アーティスト(Artist)」、「映画(Movie)」さらには曲に関連する「アーティスト(Artist)」のデータまでまとめて取ってくるということが簡単にできます。これがアソシエーションです。
しかし、このアソシエーション。
簡単に設定できるのですが、設定してしまうとユーザー情報と曲のデータだけ欲しいというときにも、アーティストや映画の情報まで引っ付いてきてしまいます。おまけに、不要なアーティストや映画の全フィールドがくっついてきます。
「今回はアーティストと、映画のデータはいらないから」と、関連を一個一個削除することもできますが、ContainableBehaviorを使うと、「曲のデータだけいるよ」と設定すればその他の余計なものが勝手に除外されるので直観的だし楽です。
さらに、フィールドのフィルタリング(曲データの中でも、「曲名」だけ取ってくるなど)も簡単に扱えます。
※ContainableBehaviorはあくまでアソシエーションに対してフィルタリングをするので、アソシエーションの設定と置き換わるものではありません。
続きを読む