cakePHP アソシエーションってどうやるの?

1、cakePHP アソシエーションってどうやるの?

アソシエーション便利ですね。
関連する複数テーブルのデータを簡単に取得することができます。

まず、アソシエーションの種類は
【種類】
・hasOne
・hasMany
・belongsTo
・hasAndBelongsToMany

hasOne (結構使ってます)

cakeマジックの仕掛け方。キーワードは「外部キー

テーブルは以下の2つ
 hogeテーブル、hogehogeテーブル

hogehogeテーブルに「hoge_id」というhogeテーブルの外部キーを作成する。([モデル名の単数形]_id)
hogeテーブルの「id」 == 「hoge_id」とする。(idはプライマリキー)


$this->hoge->findAll();
hogeテーブルと、関連するhogehogeテーブルの情報をゲット!!


相手に自分のIDが1つだけあるのがhasOneです

データはこんな配列で戻ってくる。

Arra
(
    [hoge] => Array
        (
            [id] => 35
            [title] => テスト
            [modified] => 2007-11-05 19:14:45
            [created] => 2007-08-28 18:55:43
        )

    [hogehoge] => Array
        (
            [id] => 14
            [hoge_id] => 35
            [modified] => 2007-11-05 19:14:45
            [created] => 2007-08-28 18:55:43
        )
)

hasMany (結構使ってます)

hasOneと似てます。違うのは、
相手に自分のIDが複数あるかも
1対多の関係です。


データはこんな配列で戻ってくる。

Arra
(
    [hoge] => Array
        (
            [id] => 35
            [title] => テスト
            [modified] => 2007-11-05 19:14:45
            [created] => 2007-08-28 18:55:43
        )

    [hogehoge] => Array
        (
            [0] => Array
                (
                     [id] => 14
                     [hoge_id] => 35
                     [modified] => 2007-11-05 19:14:45
                     [created] => 2007-08-28 18:55:43
                )
            [0] => Array
                (
                     [id] => 15
                     [hoge_id] => 35
                     [modified] => 2007-11-05 19:14:45
                     [created] => 2007-08-28 18:55:43
                )

        )

belongsTo (ぼちぼち使ってます)

hasOneと考え方が逆になります。
自分だけに相手のIDがあります


hogeはhasOneで、hogehogeと関連。
hogehogeはbelongsToで、hogeと関連。

$this->hogehoge->findAll();
で上記hogeでのhasOneと同じデータが取得できます。

まぁ、逆からのデータ取得の必要性が無い場合は、設定の必要が無い場合が多いかも。


hasAndBelongsToMany (全く使ってません)

説明がメンドイので割愛w



さらっと基礎的なことでした。
また、ここで説明した、プライマリーキー、外部キーはcakePHPでのお約束毎で名前が決まってます。
しかし、自由に名前を設定する事も可能です。
その代わり、設定が必要になります。
メイドイのでお勧めしませんw