Php 在Yii中保存模型两次-获取“;完整性约束冲突:1062重复条目“;
我试图保存新创建的yii模型两次-第一次是为了获得自动递增的id。第二次是为了保存与id相关的内容:Php 在Yii中保存模型两次-获取“;完整性约束冲突:1062重复条目“;,php,yii,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(); 第二次保存(edit:error被抛出到别
$node = new Node;
$node->attributes = $attrs;
$node->save(); // now I have 'id'
$node->vector = calcVector($node->id); // vector is based on 'id'
$node->save();
第二次保存(edit:error被抛出到别处)抛出此错误:完整性约束冲突:1062重复条目
。预期的行为是简单地更新已保存的模型
第二次保存的正确方法是什么?
(我可以做
$node=node::model()->findByPk($node->id);
,但这似乎不对)嗯,显然问题不在我上面描述的内容中
按预期保存两次-第一次通话插入、第二次通话更新。
问题可能是我在
beforeSave()
中保存模型。我有一个复杂而混乱的逻辑,没有意识到发生了什么。呃,显然问题不在我上面描述的内容中
按预期保存两次-第一次通话插入、第二次通话更新。
问题可能是我在beforeSave()
中保存模型。我有一个复杂而混乱的逻辑,没有意识到发生了什么。刚刚设定
$node->isNewRecord = false;
然后
干杯刚刚开始
$node->isNewRecord = false;
然后
干杯我遇到过类似的情况,我需要多次将模型保存到数据库中。我通过在保存模型后简单地实例化它来完成:
foreach ($partsIdArray as $id)
{
$model->load(Yii::$app->request->post()); // loading form values
$model->part_id = $id;
$model->save();
$model = new \backend\models\Abc();
}
我有一个类似的情况,我需要多次将模型保存到数据库中。我通过在保存模型后简单地实例化它来完成:
foreach ($partsIdArray as $id)
{
$model->load(Yii::$app->request->post()); // loading form values
$model->part_id = $id;
$model->save();
$model = new \backend\models\Abc();
}
这就是为什么首先要避免复杂和混乱的逻辑;)。如果您从
beforeSave()
调用save()
,那么您将陷入一个无休止的循环,因为save()
将触发另一个beforeSave()
。我试图通过在beforeSave()中添加内容来实现复杂性,这在许多情况下可能会触发。然而,我现在认为最好是重复我自己,而不是让代码太聪明。有时很难找到正确的平衡这就是为什么首先要避免复杂和混乱的逻辑;)。如果您从beforeSave()
调用save()
,那么您将陷入一个无休止的循环,因为save()
将触发另一个beforeSave()
。我试图通过在beforeSave()中添加内容来实现复杂性,这在许多情况下可能会触发。然而,我现在认为最好是重复我自己,而不是让代码太聪明。有时很难找到正确的平衡我认为在我上面描述的情况下没有必要这样做。(尽管这可能会对处于类似情况的人有所帮助)我认为在我上面描述的情况下没有必要这样做。(尽管它可能会对处于类似情况的人有所帮助)