ECWorks Blog

ECWorks Blog

CakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。

【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で作る携帯サイトデベロッパーズガイド

著者/訳者:滝下 真玄

出版社:秀和システム( 2009-12 )

単行本 ( 556 ページ )


Tagged as: ,

このエントリをはてなブックマークに追加 このエントリをLivedoor Clipに追加 このエントリをYahoo!ブックマークに追加 このエントリをdel.icio.usに追加 このエントリをFC2ブックマークに追加 このエントリをNifty Clipに追加 このエントリをPOOKMARK. Airlinesに追加 このエントリをBuzzurl(バザール)に追加 このエントリをChoixに追加 このエントリをnewsingに追加 

1 Comment

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

Leave a Response

コメントは承認待ちです。表示されるまでしばらく時間がかかるかもしれません。