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