【CakePHP1.3】1対多(hasMany)のアソシエーションを設定する

Userが複数のCommentを持っている

<?php
class User extends AppModel {
  var $name = 'User';
  var $hasMany = array(
    'Comment' => array(
      'className'  => 'Comment',
      'foreignKey' => 'user_id',
      'conditions' => array('Comment.status' => '1'),
      'order'      => 'Comment.created DESC',
      'limit'      => '5',
      'dependent'  => true
    )
  );
}
?>

className

現在のモデルに関連したモデルのクラス名。‘User hasMany Comment’ という関係を定義する場合、className キーは‘Comment’ になります。

foreignKey

もう一方のモデルにある外部キーの名前。複数の hasMany 関係を定義する必要がある場合に特に便利です。このキーのデフォルト値は、現在のモデル名のアンダースコア区切りの単数形で、末尾に‘_id’をつけたものです。

conditions

関連モデルのレコードを限定するための SQLSQL 内でモデル名を使用することを習慣にしておくようにしておきましょう:“status = 1.” よりも、“Comment.status = 1” の方が良い記述です。

fields

関連モデルのデータが取得された際に取り出すフィールドのリストです。デフォルトではすべてのフィールドを返します。

order

返される関連する行の並び順を定義する SQL

limit

返して欲しい関連する行の最大数。

offset

与えられた現在の条件と順番で関連したモデルのレコードを取り出す時に、スキップする行の数。

dependent

dependent キーが true にセットされると、再帰的なモデルの削除が可能になります。この例の場合、Comment レコードは、関連する User レコードが削除されたときに、同時に削除されます。
再帰的な削除をするためには、 Model->delete() メソッドの第2パラメータを true にセットしなければなりません。

exclusive

exclusive が true にセットされると、再帰的なモデルの削除は、各エントリーを個別に削除するのではなく、deleteAll() の呼び出しによって削除されます。

finderQuery

関連モデルのレコードを取得するために CakePHP が使用できる完全な SQL。これは独自の結果が必要な場合に使用します。