コンテイナブル
コンテイナブルビヘイビアはモデルがデータを取得する際に関連モデルを絞り込むことが出来ます。通常アソシエーションで関連づけられたモデルが多くなるとSQLが多く発行され、パフォーマンスが低下してしまいますが、コンテイナブルビヘイビアを使う事でパフォーマンスの低下を防ぎます。
recursiveのレベルを指定して関連モデルの範囲をある程度制限する事も可能ですが、コンテイナブルビヘイビアを使うとモデル単位でより細かな制御を行う事ができます。
class Post extends AppModel { var $actsAs = array('Containable'); }
関連し合うモデルの例。このような例の場合recursiveのレベル調整だけでは必要としないモデルのデータまで取得してしまいます。
Post->hasMany=array('Comment'); Post->belongsTo=array('User'); Comment->belongsTo=array('Post','User'); User->hasOne=array('Profile'); User->hasMany=array('Post','Comment'); Profile->belongsTo=array('User');
ポストとコメントのみ取得する
$this->Post->contain('Comment'); $this->Post->find('all');
ポストとユーザーとプロフィールのみ取得する
$this->Post->contain(array('User'=>'Profile')); $this->Post->find('all');