2012/09/21

[CakePHP] 関連したデータの取得を簡単にしてくれるビヘイビア「Containable」


CakePHPで、テーブルを結合してデータを取得するにはモデル内に関連付けの設定を書いておく。
http://book.cakephp.org/1.3/ja/view/1039/%E9%96%A2%E9%80%A3-%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E7%B5%90%E3%81%B3%E3%81%A4%E3%81%91%E3%82%8B

これだけで完結できればいいんだけど、そういう訳にもいかない。
状況によっては結合する必要のない(又は必要のある)テーブルやカラムもある。
findのオプションでjoin指定したりするのも面倒&複雑。

しょうがないので、状況に合わせてbindModelしたりunbindModelしたりしてた。
どうにか楽にしたいなーと思ってたら、たまたまどっかのブログのコメント欄で見かけた機能。
Containableビヘイビア

http://book.cakephp.org/1.3/ja/view/1323/%E3%82%B3%E3%83%B3%E3%83%86%E3%82%A4%E3%83%8A%E3%83%96%E3%83%AB

これを使うとかなり条件指定がシンプルにできる
$this->Model->find('all', array(
 'contain' => array(
  'Model1' //これでModel1を結合
  'Model2' => array(
   'fields' => array('column1', 'column2') //取得するカラムも指定できる
  )
  'Model3' => array(
   'Model4' => array( //さらにテーブルを連結することもできる
    'fields' => array('column1') //もちろんカラム指定も
   )
  )
 )
));

かなり楽!
Cakeのマニュアルの「主要なビヘイビア」ってとこに紹介されているくらいなので、知ってて当然の機能…。
マニュアル読むのを面倒くさがると後になって余計に面倒なことになったりするよね。
知ってて当然の機能かもしれんが、コレを知った時はちょっと感動した。

0 件のコメント:

コメントを投稿