WEBぷろぐらま〜 システム開発エトセトラ このページをアンテナに追加 RSSフィード

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

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

Connection: close