2013.
07.
07
17:27:32
「FuelPHP1.6、ORMモデルのfind()を理解する。」で参照系は理解したので
今回はORMモデルの更新系を勉強してみまする。
とは言っても、どーせModel_Crudと似たようなもんでしょ?
「FuelPHP1.6、Model_Crudついて理解する(1)データの登録・更新」を参考に
こんな感じのinsert用コードを書いてみるφ(--)
はい、データ追加完了♪
更新も同じような感じで……こんなコードを書いてみるφ(--)
はい、データ更新かんr……あれ?
とかエラーになりました。
おまえ、何insertしようとしてんの?
調べてみたら、ORMモデルのis_new()メソッドの中身は
らしい(--;
ちなみにModel_Crudの方のis_new()メソッドの中身はこんな感じねφ(--)
ORMモデルになって劣化してやがるっ!?Σ(´・д・`)
「_is_new」の値を設定できないのかよ。
てことは、こんな風に素直に検索してから更新かけろってことなんでしょうねφ(--)
……(--)
updateするときは毎度毎度find()しろってこと(--?
仕方が無いので最終形はこんなんなりましたφ(--)
楽にしようとした結果、余計にかったるくなってる気もするけど、まぁ仕方ないのかな(--ゞ
素直にSQL投げた方が融通が利くし楽なのは私が古い人間だからなのでしょう(--;
今回は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 "保存成功";
}
}
{
//インスタンス生成
$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 "保存成功";
}
}
{
//インスタンス生成
$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
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;
}
{
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;
}
{
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 "保存成功";
}
}
{
//インスタンス生成
$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 "保存成功";
}
}
{
//インスタンス生成
$mt = Model_Test02::forge();
//値設定
$data = array(
'column_varchar01' => 'こここ',
'column_int02' => 12,
'column_varchar02' => 'さささ',
);
//保存
if(!$mt->find(18)->set($data)->save()){
print "保存失敗";
}else{
print "保存成功";
}
}
楽にしようとした結果、余計にかったるくなってる気もするけど、まぁ仕方ないのかな(--ゞ
素直にSQL投げた方が融通が利くし楽なのは私が古い人間だからなのでしょう(--;