2008 年 5 月 のアーカイブ

CakePHP::リレーション

2008 年 5 月 6 日 火曜日

最近、自分の周りでCakePHPが流行のようなので、
Modelのクラスとテーブルをマッピングするのはフレームワークの機能ですが、テーブル同士のリレーションをどのようにして実現するのか。
モデルクラスにはリレーション(Associations)のためのメンバ変数が用意されている
$hasOne ・・・ 1対1のリレーションの場合
$hasMany ・・・ 1対多のリレーションの場合
$belongsTo ・・・ 従属テーブル側
$hasAndBelongsToMany ・・・ 多対多のリレーションの場合
場合に応じて各メンバ変数にリレーションの設定情報を連想配列で代入することで実現出来るようである。
単純な1対1、1対多のリレーションの場合は
hasOne もしくは hasManyに
以下の連想配列を持っている配列をモデル名の連想配列に入れて代入すればいいようである。
className conditions order dependent foreignKey
className以外はオプショナルでclassNameだけでも可能なようである。
foreignKey についてはCakeの命名規則に従ってない場合のみだけとか([モデル名の単数形]_idなら必要ないってことですね)
dependent を trueにしていると親が消えたときに全部子も削除してくれるそうです。
conditionsはSQL条件を加えられるようです。(”Profile.age > 18″ みたいな感じかな)
http://cakephp.jp/doc/ch06s04.html
詳しいガイドは上記のページに載っているようである。