【CakePHP】Containable指定にjoinsオプションは無効

久しぶりにCakePHPコアに関するTipsです。
バージョンは1.2系ですが、たぶん1.3系も同じだと思います。

で、今回は超便利なContainableビヘイビアの話題。
アソシエーションがたくさんになった場合は、このビヘイビアを使うことで、好きなモデル厳選して取り出すことも可能になります。
conditionsとかのオプション指定も可能! HABTM先の条件は、そのままでは指定が出来なくて全部データをとってきてしまうのですが、containを使えばHABTM先をフィルタリングできます。超便利!!

使い方は Cookbook を見てもらうとして、一つだけ落とし穴があるので注意!

通常のfind()では、オプションで’joins’を与えることにより、JOIN方法を指定できるのですが、containでは出来ないです。例えば、INNER JOINを使いたくても、contain先に指定が出来ません。デフォルトはLEFT JOINなので、該当しないレコードは空で返ってきますので、contain元と先の両方にデータがあるもののレコードをとってくるとかの場合は、afterFind()等でフィルター処理を書く必要があります。

ソースコードを見たら、containable内でオプションの該当キーの名前を保持している配列内に「joins」が無かったので、処理が入っていないと思います。不便なのでチケットとか投げた方が良いかもしれませんね。


【執筆しました! 是非お求めください】

PHPで作る携帯サイト デベロッパーズガイド

PHPで作る携帯サイト デベロッパーズガイド [書籍]

著者滝下 真玄

出版社秀和システム

出版日2009-12-22 (火)

商品カテゴリー単行本

ページ数556

ISBN4798024767

Supported by amazon Product Advertising API


【CakePHP】Containable指定にjoinsオプションは無効” への1件の返信

  1. こんにちは。わたしもこれ気になっていました。
    cakeってデフォルトがなんでもLEFT JOINなんですよね。せっかく便利なビヘイビアがあるのですが、使う機会としてはINNER JOINで使うシーンの方が今多くて、ちょっと困っています。便利なので使えるだろう、と思っていたのですが落とし穴でした。

コメントは受け付けていません。