在Yii中保存模型两次 - 获得“完整性约束违规:1062重复条目”

时间:2013-09-23 01:21:41

标签: php yii

我正在尝试两次保存新创建的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);,但这似乎不对)

3 个答案:

答案 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();
    }