まとめ(1) では1対1のアソシエーション hasOne でしたが、
今回は1対多のアソシエーション hasMany です。

例えば、一人のユーザに複数のコメント投稿があるような場合です。
データベースは

CREATE TABLE users(
    id int unsigned auto_increment primary key,
    nickname varchar(30) NOT NULL,
    created datetime default NULL,
    modified datetime default NULL
);

CREATE TABLE posts(
    id int unsigned auto_increment primary key,
    user_id int unsigned unique,
    comment text,
    created datetime default NULL,
    modified datetime default NULL
);

のような場合、アソシエーションの定義は下記のようになります。

< ?php
class User extends AppModel
{
    var $name = 'User';
    var $hasMany = array('Post' =>
                    array('className' => 'Post',
                          'conditions' => '',
                          'order' => '',
                          'foreignKey' => 'user_id',
                          'dependent' => true,
                          'exclusive' => false,
                          'finderQuery' => ''
                    )
                  );
}
?>

これで、
$this->User->findById($id);
とすると下記のようにデータを取得できます。

Array
(
    [User] => Array
        (
            [id] => 1
            [nickname] => boze
        )
    [Post] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [user_id] => 1
                    [comment] => コメント1です
                )
            [1] => Array
                (
                    [id] => 1
                    [user_id] => 1
                    [comment] => コメント2です
                )
            ....
        )
);

また、hasOne などと同様に CakePHP の命名規約に従っていれば、foreignKey は指定しなくても大丈夫ですので、最低限
var $hasMany = array('Post');
でもアソシエーションを定義できます。

また、hasMany で指定する配列の意味は下記の通りです。

className
関連付けたいモデルのクラス名

conditions
hasMany で取得したいデータの条件を指定する。 SQL の条件文。

order
関連するモデルのデータの並び順。SQL の ORDER 句の指定方法。
Post.created DESC
テーブル名をカラム名の前に付けないと、User.created と区別できません。

limit
Cake が取り出す関連モデルのデータの最大数。
‘limit’ => 5 のように数字で指定。

foreignKey
関連しているモデルを指している外部キーの名前。
Cake の命名規約に従っている場合は省略可能。従っていない場合はここで指定する。

dependent
true に設定すると、モデルのデータの削除時に関連しているモデル側のデータも削除される。

exclusive
true に設定すると、関連しているすべてのオブジェクトが一つの SQL ステートメントで削除される。

finderQuery
アソシエーションを取り出すために、完全な SQL ステートメントを指定する。

CakePHP 日本語マニュアル
6.4. アソシエーション

関連する投稿