【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
関連モデルのレコードを限定するための SQL。SQL 内でモデル名を使用することを習慣にしておくようにしておきましょう:“status = 1.” よりも、“Comment.status = 1” の方が良い記述です。
fields
関連モデルのデータが取得された際に取り出すフィールドのリストです。デフォルトではすべてのフィールドを返します。
order
返される関連する行の並び順を定義する SQL。
limit
返して欲しい関連する行の最大数。
offset
与えられた現在の条件と順番で関連したモデルのレコードを取り出す時に、スキップする行の数。
dependent
dependent キーが true にセットされると、再帰的なモデルの削除が可能になります。この例の場合、Comment レコードは、関連する User レコードが削除されたときに、同時に削除されます。
再帰的な削除をするためには、 Model->delete() メソッドの第2パラメータを true にセットしなければなりません。
exclusive
exclusive が true にセットされると、再帰的なモデルの削除は、各エントリーを個別に削除するのではなく、deleteAll() の呼び出しによって削除されます。