プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
FuelPHP1.6、ORMモデルのsave()を理解する。
FuelPHP1.6、ORMモデルのfind()を理解する。」で参照系は理解したので
今回はORMモデルの更新系を勉強してみまする。

とは言っても、どーせModel_Crudと似たようなもんでしょ?

FuelPHP1.6、Model_Crudついて理解する(1)データの登録・更新」を参考に
こんな感じのinsert用コードを書いてみるφ(--)

public function action_add()
{
    //インスタンス生成
    $mt = Model_Test02::forge();

    //値設定
    $data = array(
        'column_varchar01' => 'かかか',
        'column_int02' => 11,
        'column_varchar02' => 'ききき',
    );
    $mt->set($data);

    //保存
    if(!$mt->save()){
        print "保存失敗";
    }else{
        print "保存成功";
    }
}

はい、データ追加完了♪

更新も同じような感じで……こんなコードを書いてみるφ(--)

public function action_edit()
{
    //インスタンス生成
    $mt = Model_Test02::forge();

    //値設定
    $data = array(
        'pk_id' => 18,
        'column_varchar01' => 'くくく',
        'column_int02' => 12,
        'column_varchar02' => 'けけけ',
    );
    $mt->set($data);

    //update指定
    $mt->is_new(false);

    //保存
    if(!$mt->save()){
        print "保存失敗";
    }else{
        print "保存成功";
    }
}

はい、データ更新かんr……あれ?

23000!
Fuel\Core\Database_Exception [ 23000 ]: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '18' for key 'PRIMARY' with query: "INSERT INTO `tbl_test01` (`pk_id`, `column_varchar01`, `column_int02`, `column_varchar02`) VALUES (18, 'くくく', 12, 'けけけ')"

COREPATH/classes/database/pdo/connection.php @ line 208

とかエラーになりました。
おまえ、何insertしようとしてんの?

調べてみたら、ORMモデルのis_new()メソッドの中身は

public function is_new()
{
    return $this->_is_new;
}

らしい(--;

ちなみにModel_Crudの方のis_new()メソッドの中身はこんな感じねφ(--)

public function is_new($new = null)
{
    if ($new === null)
    {
        return $this->_is_new;
    }

    $this->_is_new = (bool) $new;

    return $this;
}

ORMモデルになって劣化してやがるっ!?Σ(´・д・`)
「_is_new」の値を設定できないのかよ。

てことは、こんな風に素直に検索してから更新かけろってことなんでしょうねφ(--)

public function action_edit()
{
    //インスタンス生成
    $mt = Model_Test02::forge();

    //find()
    $mt2 = $mt->find(18);

    //値設定
    $data = array(
        'column_varchar01' => 'くくく',
        'column_int02' => 12,
        'column_varchar02' => 'けけけ',
    );
    $mt2->set($data);

    //保存
    if(!$mt2->save()){
        print "保存失敗";
    }else{
        print "保存成功";
    }
}

……(--)
updateするときは毎度毎度find()しろってこと(--?

仕方が無いので最終形はこんなんなりましたφ(--)

public function action_edit3()
{
    //インスタンス生成
    $mt = Model_Test02::forge();

    //値設定
    $data = array(
        'column_varchar01' => 'こここ',
        'column_int02' => 12,
        'column_varchar02' => 'さささ',
    );

    //保存
    if(!$mt->find(18)->set($data)->save()){
        print "保存失敗";
    }else{
        print "保存成功";
    }
}

楽にしようとした結果、余計にかったるくなってる気もするけど、まぁ仕方ないのかな(--ゞ
素直にSQL投げた方が融通が利くし楽なのは私が古い人間だからなのでしょう(--;
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:FuelPHP  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事