我正在尝试两次保存新创建的yii模型 - 首先获得自动增加的id。第二次保存与id相关的东西:
$node = new Node;
$node->attributes = $attrs;
$node->save(); // now I have 'id'
$node->vector = calcVector($node->id); // vector is based on 'id'
$node->save();
第二次保存(编辑:错误被抛到别处)会引发此错误:Integrity constraint violation: 1062 Duplicate entry
。预期的行为是简单地更新已保存的模型。
第二次保存它的正确方法是什么?
(我可以做$node = Node::model()->findByPk($node->id);
,但这似乎不对)
答案 0 :(得分:1)
只需设置
$node->isNewRecord = false;
然后
$node->save();
欢呼声
答案 1 :(得分:0)
保存两次正在按预期工作 - 第一次呼叫插入,第二次呼叫更新。
问题可能是我在beforeSave()
中保存了模型。我在那里有一个复杂而混乱的逻辑,没有意识到发生了什么......
答案 2 :(得分:0)
我有一种类似的情况,我需要多次将模型保存到数据库。我通过在保存后简单地实例化模型来完成它:
foreach ($partsIdArray as $id)
{
$model->load(Yii::$app->request->post()); // loading form values
$model->part_id = $id;
$model->save();
$model = new \backend\models\Abc();
}