ActiveRecord保存后设置的ID不正确

时间:2015-06-22 19:55:01

标签: php activerecord yii2

所以我遇到了一个正在发生的奇怪的错误,但只是在某些时候。我似乎无法确定导致它发生的任何事情。基本上,我有一个ActiveRecord,它与我的数据库中的表相对应。我为对象赋值并调用save()

假设我有以下代码:

$student = new Student();
$student->name = "Gregg";
$student->surname = "Smith";
$student->gender = "Male";
$student->save();

然后我的Student活动记录模型我有以下内容:

public function afterSave()
{
    $this->assignStudent($this->id);
}

$this->id保存后不是正确的ID。我可以看到日志中的ID为1416253,而该记录的数据库中的ID为670336。这样的事情怎么会发生?

更新 我已经做了一些调查,似乎通过在执行插入后分配最后一个插入ID来分配$ this-> id。除了它不返回save()插入的ID,而是返回先前完成的插入(有问题的插入进入log表)。这意味着根据系统,插入学生表是不正确发生的(即使它是,因为我可以在DB中看到记录)。

1 个答案:

答案 0 :(得分:0)

我不确定如何出现错误的ID。错误的id是否匹配表的另一条记录?

你有没有尝试过这样的东西确保最新?

public function afterSave()
{
    $this->refresh();
    $this->assignStudent($this->id);
}

此外,文档说明"当重写此方法时,请确保调用父实现以便触发事件" (documentation afterSave)。所以我认为写这一切的正确方法可能是:

public function afterSave($insert, $changedAttributes)
{
    parent::afterSave($insert, $changedAttributes);
    $this->refresh();
    $this->assignStudent($this->id);
}