- ベストアンサー
cakephp動的アソシエーションについて
お世話になっております。 cakephpでアソシエーションをコントローラ側で設定しようとしたところ $this->Model->bindModel(array(‘hasOne’=>array(‘Model_3′))); このような形にされてるのが多いのですが $this->Model->hasMany = array('Model' ); こちらのようにコントローラー側で直接変数に モデル設定してはいけないのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
hasMany などアソシエーション用field値は、先にモデルのクラスファイル内に書いてあることで、モデルのコンストラクターがそれをオブジェクトに変換する処理をしています。 モデルのコンストラクタ実行(そのモデルがオブジェクトとして読み込まれたということ)よりも後に、field 名でhasManyだけ定義してもただの配列で、オブジェクトとしてアクセスできないのみでなく、アソシエーション先モデルを読み込むことすら行われません。よって、findでその連係先モデルからのデータは取得できません。 bindModel() メソッド呼び出しによって、コンストラクターで行っていたのと同じ作業が実行されて、同じように使えるようになります。 つけたり、外したりが頻繁におこなわれるなら、コンテイナブル ContainableBehavior を利用することをおすすめします。 先に、必要なアソシエーションは全部記述しておいて、ContainableBehavior によって必要なものだけ選んで装着ということができます。 cakePHP1.3 のマニュアルへのリンク入れておきます
お礼
bindModelはそのような働きをしてたんですか 勉強になりました ありがとうございます。