Modelデータバインドの方法

Pocket

Modelはアソシエーションを持つ場合が多いが、Modelに予めアソシエーションを付けておくと後々重たくなってくる事があるため、普段は軽量化のためにアソシエーションを切っておき、使う時だけアソシエーションをバインドする事ができる。

バインドとはモデルに予め指定していなかったアソシエーションを動的に作る事を実現する。例えば、予めアソシエーションを付けておくとfindの度に複数テーブルへのSQL発行が発生したりjoinが発生したりして無駄な事が多い。なので、ビュー毎に必要な場合だけバインドする事で処理を最小限に抑える事ができる。

バインドするには、Model::bindModel()関数を使う。

書き方

$bind = array(
   'hasMany' => array(
      'Employee' => array(
         'className' => 'Employee',
         'foreignKey' => 'company_id',
         'exclusive' => TRUE,
         'order' => array('Employee.id' => 'ASC'),
      )
   )
);
$this->bindModel($bind, $reset);

ここでは、予めアソシエーションの内容を$bind変数に準備しておき、$this->bindModel()関数で実際にバインドを追加している。

アソシエーションを解除したい場合はunbindModel()関数を利用する。

$this->unbindModel(array('hasMany' => array('Employee')));

ここではhasManyについてのみ記述したが、アソシエーションの記事に従ってhasOneやbelongsTo, hasAndBelongsToManyもbindModel()によって追加する事ができる。

 

記事が役に立ったらぜひシェアをお願いします。

Pocket