ORM(オブジェクトリレーショナルマッパー)はリレーションを組むのに便利なモデル。
FuelPHP1.7でのOrmのメソッド操作も参照。
FuelPHPでは $_has_many、$_belongs_to、$_has_one、$_many_manyという4つの種類のリレーションが用意されている。
今回は、「$_has_many」だけ。
「$_has_many」は1対多のリレーションを設定する。
公式サイトの説明、よくわからんな・・・
1.$_has_manyでリレーション設定
Model_Post と Model_Comment の2つのモデルで考える。
Model_Post と Model_Comment を「1対多」となるよう設定する。
1つの記事に複数のコメントがつくイメージ。
その場合、「Model_Post」に「$_has_many」を、「Model_Comment」に「$_belong_to」を記述する。
「Model_Comment」をターゲットモデルと便宜上呼ぶ。
「Model_Post」に $_has_manyを定義する。
基本的な設定がこれ、らしいが、これだけで使用することはなさそう。
[PHP]
protected static $_has_many = array(‘comments’);
[/PHP]
通常はこっち。
このリレーションを「comments」と名づける。操作するときに使う。
protected static $_has_many = array( 'comments' = array( 'key_from' = 'id' //① 'model_to' = 'Model_Comment', //② 'key_to' = 'post_id', //③] 'cascade_save' = true, //④ 'cascade_delete' = false, //⑤ ) );
① key_from:結合条件の自分側(記述しているモデル側)。
② model_to:ターゲットモデルを指定。つまり「多」の方のテーブルがマッピングされたモデル名(Model_Comment)。
③ key_to:結合条件の相手側(ターゲットモデル側)。
④ cascade_save:カスケードされたターゲットモデルも更新するかどうか。
⑤ cascade_delete:カスケードされたターゲットモデルも削除するかどうか。
「Model_Comment」のほうに $_belong_toを指定する
「$_belongs_to」は「自分が紐付けられる側ですよ~」の意味。
$_has_manyで「model_to」に指定したモデル内に記述する。
リレーション名を「post」と名づける。
// postに属しているModel_Commentで protected static $_belongs_to = array( 'post' => array( 'key_from' => 'post_id', //① 'model_to' => 'Model_Post', //② 'key_to' => 'id', //③ 'cascade_save' => true, 'cascade_delete' => false, ) );
① fromは「~から」って意味だから自分のとこ(この場合はModel_Commentのカラム)
② toは「~へ」って意味だから相手
③ 同上
2.リレーションの使い方
デフォルトでリレーションは使えないため、リレーションの確立という操作を最初に行なう。
①の comments はModel_Postで定義したやつ。
// 両方のメインと関連オブジェクトをnewする: $post = new Model_Post(); $post->comments[] = new Model_Comment(); //① $post->save();
それから操作。
① ID=1 の記事をとってくる。
② ID=6 のコメントをModel_Commentから取得する。
$post = Model_Post::find(1); //① $post->comments[6] = Model_Comment::find(6); //② $post->save();
最後にリレーションの切断を行なう。
これで全部切れるの?
$post = Model_Post::find(1); unset($post->comments[6]); $post->save();
使い方色々あって、全部は紹介しきれない。全部理解できてない。
Orm奥深すぎ。
参考
はじめに – Relations – Orm Package – FuelPHP ドキュメント
Has Many – Relations – Orm Package – FuelPHP ドキュメント
FuelPHP1.6、ORMモデル間の関連付け(has_one、has_many、belongs_to)を理解する。|マコトのおもちゃ箱 ~ぼへぼへ自営業者の技術メモ~
コメント