FuelPHP1.7でOrm/ModelについてInsert後そのオブジェクトを使用して再度Insertしようとした時にアップデートになった。
どうやらプロパティのis_newを更新しないとだめらしい。
Orm/Modelの場合はis_newはprotectedなのでそのまま更新したら追加になった。
$model = Model_XXXXX::forge();
$model->is_new =true;
なおModel_Crudを使用している場合はメソッドで更新できる。
$model = Model_XXXXX::forge();
$model->is_new(true);
しかし、このテーブルのプライマリキーをauto_incrementしていたら、その値がリセットされないという事象が発生する。。。。
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2' for key 'PRIMARY'
ソースは以下の通り
$records = array(
array('カラム1'=>'値1')
, array('カラム1'=>'値2')
);
$model = Model_XXXXX::forge()
foreach($records as $record) {
$model->set($record);
$model->is_new = true;
$model->save();
}
むかつく・・・
ORMのソースみてたらcloneするとis_newも含めて新規に設定するみたいなので以下のようにして回避した。とりあえずこれでいいか。。。
こちらでOK
$records = array(
array('カラム1'=>'値1')
, array('カラム1'=>'値2')
);
foreach($records as $record) {
$obj = Model_XXXXX::forge()
$obj->set($record);
$obj->save();
unset($obj);
}
こっちでもできますが、無駄が多いです。
$records = array(
array('カラム1'=>'値1')
, array('カラム1'=>'値2')
);
$model = Model_XXXXX::forge()
foreach($records as $record) {
$obj = clone $model;
$obj->set($record);
$obj->save();
unset($obj);
}