Cake PHPの4種類のアソシエーション

1. hasOne

ユーザーには一つのプロファイルしかない、などの関係

関係スキーマ
住所がユーザーに紐付けられているaddresses.user_id

ユーザーと住所の関係の場合、以下のように初期化できる。

class UsersTable extends Table
{
    public function initialize(array $config)
    {
        $this->hasOne('Addresses');
    }
}

2. belongsTo

複数の弟子が師匠につくなどがbelongsToの例。それは以下のように表すことができるそう。

関係スキーマ
弟子が師匠につくstudent.mentor_id
複数の登録しているサービスがユーザーに紐付けられているserivce.user_id

弟子と師匠の関係は以下のように初期化できる。

class StudentTable extends Table
{
    public function initialize(array $config)
    {
        $this->belongsTo('mentor');
    }
}

3. hasMany

記事に複数のコメントがついている、みたいな関係を表す。

関係スキーマ
記事にたくさんのコメントがついているComments.article_id
商品にはたくさんのオプションが有るOptions.product_id
医者にはたくさんの患者がいるPatients.doctor_id

コメントと記事の関係については以下のように初期化できる。

class ArticlesTable extends Table
{
    public function initialize(array $config)
    {
        $this->hasMany('Comments');
    }
}

4. belongsToMany

関係スキーマ
複数の記事に対して複数のタグがついているarticles_tags.id, articles_tags.tag_id, articles_tags.article_id
複数の患者に対して複数の医者がついているdoctors_patients.id, doctors_patients.doctor_id, doctors_patients.patient_id

タグなどについては以下のように初期化することができる。

class ArticlesTable extends Table
{
    public function initialize(array $config)
    {
        $this->belongsToMany('Tags');
    }
}