•  
  •  
  •  
  •  
  •  
  •  
  •  

こんにちは。ざっくです。

 

さて、今回はCakePHPの機能でもあるアソシエーションを紹介します。

モデル同士をつなぐ機能ですが、所謂joinみたいなものです。(正確には違います、SQLが二発発行されたりもするのでパフォーマンスがどうのこうのあったりなかったり。)

モデルに明記しておくことでCakeさんが自動的に関連データを取得してきてくれる夢のような機能となっています。

 

よく使われるのはhasOne, hasMany, belongsToあたりですので今回はその使い方をざっくりと書きたいと思っ

 

 

ていましたが、ネット上にいくらでも書いてあるので今度にします。

 

今回はプログラムの途中で、新たにアソシエーションを設定したいテーブルなどに、

一時的にアソシエーションを設定する方法を書きたいと思います。

 

$this->User->bindModel(array(
    'hasOne'=>array('アソシエーションしたい先のモデル名', 'アソシエーションしたい先のモデル名2')
    )
)

 

このようにあらかじめ明記しておかなくても一時的にUserテーブルとのアソシエーションの設定が可能になります。

複数ある場合は上記のように","で区切ってください。

ただし、この効果も一度のfind()にしか効果がありません。

引き続き有効にしたい場合は第二引数にfalseを設定してあげてください。

$this->User->bindModel(array(
    'hasOne'=>array('アソエーションしたい先のモデル名')
    ),
    false
);

 

逆に、一時的にUserテーブルとのアソシエーションの設定を解除したい場合は以下の方法で可能です。

$this->User->unbindModel(array(
     'hasOne'=>array('アソエーションしている先のモデル名')
     )
);

 

ある程度大きなシステムになるとUserテーブルやProfileテーブルなどのユーザーに紐づくようなテーブルはアソシエーションの設定をされてると思いますが、Profileテーブルの情報だけ取得したい時などに有効になります。

上記の方法も同じく第二引数にfalseを与えることで永続的に設定を解除したままになります。

またhasOneを例に記述しましたがhasManyやbelongsToも同じように解除することが可能ですし、一時的に新たにモデル同士のアソシエーションを設定することも可能です。

 

次回は、基礎編としてfind()のあれこれを書こうと思ってます。

が、変わるかもしれませんので期待はしないでください!

お見積いたします。どんなことでも、お気軽にご相談ください。

お客様のご要望とご予算に応じて最適なソリューションをご提案いたします。
VRの開発やアプリ開発以外でも、ぜひ一度ご相談ください。

  •  
  •  
  •  
  •  
  •  
  •  
  •  

VRの開発やアプリ開発などのご依頼は【Vermuda LLC,】へ

【Vermuda LLC,】ではVRの開発やWEBシステム、アプリの開発などを通し、皆様の業務を楽しく便利にするお手伝いをしております。特にVRは近年注目を集めているマーケティングツールで、スマホを使った販促活動にも役立ちます。会社が売り出す商品やサービスが3Dで立体的に見えると、より顧客の知的好奇心を刺激することが可能です。会社の魅力が伝わるVRやアプリ開発の依頼先を探しておりましたら、ぜひ【Vermuda LLC,】へご依頼ください。見積もりは随時承っております。