忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

FuelPHPのORM覚え書き

FuelPHPのORMモデルのリレーション定義で、「cascade_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

この記事にコメントする

お名前
タイトル
メール
URL
コメント
絵文字
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
パスワード

人気新作ブランドコピー

ブランド腕時計バッグ財布コピー エルメス(バッグ、時計) シャネル(バッグ、時計)ルイヴィトン(バッグ、時計) ブルガリ時計 グッチ(バッグ、小物) ロレック(時計)オメガ(時計) IWC(時計)FRANCK MULLER(時計)1.最も合理的な価格で商品を消費者に提供致します。2.弊社の商品品数大目で、商品は安めです!商品現物写真。3.数量制限無し、一個の注文も、OKです。4.1個も1万個も問わず、誠心誠意対応します。5.不良品の場合、弊社が無償で交換します。不明点、疑問点等があれば、ご遠慮なく言って下さい。}}}}}}
https://www.mbag78.com/goods-2083.html?from=rss