2011年2月17日木曜日

[CakePHP] paginateでアソシエーション設定する

複数テーブルをJoinし操作する場合、通常Model内のプロパティ
(belongsTo,hasOne,hasMany,hasAndBelongsTomany)にアソシエーション定義しますが、
paginateではJoinしてくれないので、bindModelで動的に定義します。

書式
$this->ModelName->bindModel($params, $reset);
$params:追加したいアソシエーション定義
$reset:true=一時的に設定する、false=設定変更する(初期値はtrue)

ポイントは2点
・bindModelの引数$resetはfalseにする。trueするとページングで定義が引き継がれない。
・paginateのrecursiveは0以上にする。

サンプル
$this->ModelA->bindModel(array(
  "belongsTo" => array(
    'ModelB' => array(
      'className' => 'ModelB',
      'foreignKey' => 'ModelA.id',
    ),
  )
),false);
$this->paginate = array(
  'ModelA' => array(
    'fields' => '',
    'conditions' => $conditions,
    'limit' => $limit,
    'order' => 'ModelA.id ASC',
    'recursive' => 0,
  ),
);

0 件のコメント: