複数のテーブルをまたぐ抽出条件
こうやってカテゴリーが増えていくんですね。
最近cakeばっかりです。超一流のプログラマーをwizardと言ったり言わなかったりするそうですが、cakeを極めるとパティシエと呼ばれるんでしょうかね?
さて、cakePHPのfindのお話。
conditionsに色々と抽出条件を書きますが、アソシエーションを組んだ場合で、連結先のフィールドに対して絞り込むときの考え方。
belongsToやhasOneしてあるモデルに対しては普通にconditionsに書けばいい。SQL実行時にこれらはLEFT JOINされるので問題なく使える。
じゃぁ、hasManyとHABTMは?
相手先のidを取ってきてから、中間テーブルをhasOneで繋ぎ直して、使うとか……。かなり難解。ある程度動きを追える状態じゃないとハマりそうですね。
更にその先にあるテーブルに条件を設定したい場合は?
実はfindで全部持ってきてから再度しぼり込むような感じになります。中心となるテーブルを見直すなどして、ちゃんと絞り込めるようにしましょう。
で、一つの解決策として、viewを使うという手もあります。
db上にviewを作って、それに対応したモデルを使って、絞り込めるようにしてみようというアイデア。外部キー周りがデフォルトの命名規則から外れてしまうが、案外スムーズに期待した結果がとれた。
viewって
特徴を理解して使いましょう。