所以我遇到了一个正在发生的奇怪的错误,但只是在某些时候。我似乎无法确定导致它发生的任何事情。基本上,我有一个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中看到记录)。
答案 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);
}