ほんわか騎士団
主にゲームの攻略や紹介、思ったことなどを書いています。
FuelPHPのORM覚え書き
FuelPHPのORMモデルのリレーション定義で、「cascade_save」っていうのがある。
多分、これをtrueにするとsave()した時に親子(孫)関係のモデルも一気にDBに書き込んでくれるのだと思うけど、実際に使ってみたところ、親のモデルでsave()しても親のモデルだけが保存された。
子(孫)のモデルでsave()したら親のモデルも保存された。
具体的にはこんな感じ
Model_User
protected static $_has_many = array(
Model_Shop
上記3つのモデルをそれぞれnewしてアトリビュートをセットしていき、リレーションを繋ぎ、最後にModel_Optionをsave()するとOK。Model_Userをsave()しても保存されるのはModel_Userだけだった。
$user = new Model_User();
$user->name = 'ほげ';
$shop = new Model_Shop();
$shop->name = 'Hoge';
$shop->user = $user;
$option = new Model_Option();
$option->val = 1;
$option->shop = $shop;
$option->save(); // $user->save(); だとうまくいかない
って、書いてて何故か分かった気がする。
子と孫側からは繋げてるけど、親側からは繋げていないからか。
最後に
$user->shops[] = $shop;
$shop->options[] = $option;
って書けば、$user->save()で孫まで保存されるのではないかと。
多分、これをtrueにするとsave()した時に親子(孫)関係のモデルも一気にDBに書き込んでくれるのだと思うけど、実際に使ってみたところ、親のモデルでsave()しても親のモデルだけが保存された。
子(孫)のモデルでsave()したら親のモデルも保存された。
具体的にはこんな感じ
Model_User
protected static $_has_many = array(
'shops' => array(
'key_from' => 'id',
'model_to' => 'Model_Shop',
'key_to' => 'user_id',
'cascade_save' => true,
'cascade_delete' => false,
)
);
Model_Shop
protected static $_belongs_to = array(
'user' => array(
'key_from' => 'user_id',
'model_to' => 'Model_User',
'key_to' => 'id',
'cascade_save' => true,
'cascade_delete' => false,
)
);
);
protected static $_has_many = array(
'options' => array(
'key_from' => 'id',
'model_to' => 'Model_Option',
'key_to' => 'shop_id',
'cascade_save' => true,
'cascade_delete' => false,
)
);
Model_Option protected static $_belongs_to = array(
'shop' => array(
'key_from' => 'shop_id',
'model_to' => 'Model_Shop',
'key_to' => 'id',
'cascade_save' => true,
'cascade_delete' => false,
)
);
);
上記3つのモデルをそれぞれnewしてアトリビュートをセットしていき、リレーションを繋ぎ、最後にModel_Optionをsave()するとOK。Model_Userをsave()しても保存されるのはModel_Userだけだった。
$user = new Model_User();
$user->name = 'ほげ';
$shop = new Model_Shop();
$shop->name = 'Hoge';
$shop->user = $user;
$option = new Model_Option();
$option->val = 1;
$option->shop = $shop;
$option->save(); // $user->save(); だとうまくいかない
って、書いてて何故か分かった気がする。
子と孫側からは繋げてるけど、親側からは繋げていないからか。
最後に
$user->shops[] = $shop;
$shop->options[] = $option;
って書けば、$user->save()で孫まで保存されるのではないかと。
PR
この記事にコメントする
人気新作ブランドコピー
ブランド腕時計バッグ財布コピー エルメス(バッグ、時計) シャネル(バッグ、時計)ルイヴィトン(バッグ、時計) ブルガリ時計 グッチ(バッグ、小物) ロレック(時計)オメガ(時計) IWC(時計)FRANCK MULLER(時計)1.最も合理的な価格で商品を消費者に提供致します。2.弊社の商品品数大目で、商品は安めです!商品現物写真。3.数量制限無し、一個の注文も、OKです。4.1個も1万個も問わず、誠心誠意対応します。5.不良品の場合、弊社が無償で交換します。不明点、疑問点等があれば、ご遠慮なく言って下さい。}}}}}}
https://www.mbag78.com/goods-2083.html?from=rss
https://www.mbag78.com/goods-2083.html?from=rss
最新記事
(02/24)
(02/23)
(02/22)
(02/19)
(02/16)
(02/09)
(02/09)
(02/06)
(02/06)
(02/05)