スポンサードリンク

CakePHP
CakePHP

CakePHPはアソシエーションで

モデルを自動的につなげてくれる

便利な機能なんですが、

時々使わないモデルを呼び出して

SQULクエリが多くなって

読み込みが遅くなったりします。

そんなときに一時的にアソシエーションを外すことができます。

スポンサードリンク

unbindModelを使う

アソシエーションを外したいときに

コントローラーのアクション内で

$this->Model->unbindModel(array(
    'belongsTo' => array('Modelname'),
    'hasMany' => array('Modelname'),
    'hasAndBelongsToMany' => array('Modelname')
    )
);

上記の様に書きます。

こうするとfindなどでデータを取得するときに

アソシエーションを外した状態でデータを取ってくれます。

しかし、このままだと1回の使用しかできません。

アクション内でずっとアソシエーションを外したままにしたい場合は

第2引数にfalseをいれます。

自分のモデルの時は

第2引数にfalseを入れます。

$this->Model->unbindModel(array(
    'belongsTo' => array('Modelname'),
    'hasMany' => array('Modelname'),
    'hasAndBelongsToMany' => array('Modelname')
    ),false
);

これでアクション内では

アソシエーションを外したままで使用できます。

CakePHP Cookbook v2.x アソシエーション: モデル同士を繋ぐ

スポンサードリンク