• 今度のガンダムは低年齢層向けらしいので、ガンダムUCの第4話を待ち望んでワクワクしとこうと思ってるteruchiです。

    今回もCakePHPネタです。

    前回、paginateの時のbindModel()について書きましたが、

    http://blog.genieframe.com/?p=721

    今回はModel::save()時のunbindModel()です。

    bindしてるModelをsaveしようとすると、カラム名にモデル名を付加しないとSQLエラーになることがよくあります。

    SQLをデバッグするとわかりますが、UPDATE文に関連モデルをjoinしていることがわかります。

    saveAll()とかで、これがうまい具合に効いてくるのだと思いますが、
    単純に1レコードだけ更新(もしくは追加)したいのに邪魔です。

    contain()を使いたくなりますが、save()の時には無関係のようです。
    (ソースを追っかけてないので想像)

    で、unbindModelを使えばこれがサクっと解決します。


    Book belongsTo Shop

    の状態であれば、

    $this->Book->unbindModel(array('belongsTo' => array('Shop')), false); // falseはいらない?

    $this->Book->save(array(
    'name' => 'ユニコーンの日(上) 機動戦士ガンダムUC(1)’,
    'auther' => '福井 晴敏',
    'publisher' => '角川文庫'));

    で行けます。

    ガンダムUCの第4話ではどうやらあのブライト艦長が出てくるようです。

    それでは、また来週もエンターキーで弾幕張りましょう。
    よい週末を。

    Top

Top

コメントの投稿

Gravatar