CakePHP/モデル/関連を作る

CakePHP/モデル/関連を作る

バージョンと製造年月日

2011-09-04

belongsTo

たぶんこれが一番よく使う関連。

使う状況

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的に結合する
php/cakephp/model/make_relation.txt · 最終更新: 2017-09-26 19:02 by ore