menu
書いてる野郎
orebike@gmail.com
2011-09-04
たぶんこれが一番よく使う関連。
belongsToとhasOneはよくひっくり返しで語られるが、順逆両方向から引けないといけないという義務はない。 仕様として逆が無いならば逆側は定義する必要ないと思ってる。
トランザクションテーブルにマスタのIDを持っていて、そのマスタデータも含めてトランザクションから引っ張りたい状況。 このような場合に使うのがbelogsToの関連
売上データに商品IDが入っている場合に売上データというトランザクションから商品マスタのIDへと引くわけだ。
マスタがある状態をとるとしてその状態自体が外部のマスタとして定義されていてこの関連を取る場合もbelongsToで解決できる。
マスタの詳細が外部出しされていてそれの関連の場合。 この場合マスタ側が詳細項目をチョイスしているわけでなくマスタと詳細が一体なわけだからデータの統合に必要なのはマスタ側のキー。 すなわち繋ぎ先のキーは詳細項目が持っているのでhasOneの関係になる。勘違いしやすい関係
関連を張りたいモデル、今ならトランザクションデータのモデルのメンバに
var belongsTo = array( 'HogeHoge' => array( 'className' => 'Hoge', 'foreignKey' => 'hoge_id', 'conditions' => 'Hoge.piyo IS NULL', 'type' => 'LEFT' ) );
このように記述する
HogeHoge | HogeHogeは単なるラベルでfindで引っ張った場合関連先の内容はHogeHogeというキー以下に格納される。つまりこれを変えれば何個でも関連を張れる |
className | 関連先モデルのクラス名 |
foreignKey | 結合に使う自分の(今ならトランザクション側)フィールド名。マスタ側は自動的にidになる |
conditions | 結合の条件 |
type | 普通にLEFT JOIN的に結合する |