Php ActiveRecord保存后设置的ID不正确
所以我遇到了一个正在发生的奇怪的bug,但只是在某些时候。我似乎无法确定是什么导致了这一切的发生。基本上,我有一个ActiveRecord,它与数据库中的一个表相对应。我给一个对象赋值并调用Php ActiveRecord保存后设置的ID不正确,php,activerecord,yii2,Php,Activerecord,Yii2,所以我遇到了一个正在发生的奇怪的bug,但只是在某些时候。我似乎无法确定是什么导致了这一切的发生。基本上,我有一个ActiveRecord,它与数据库中的一个表相对应。我给一个对象赋值并调用save() 假设我有以下代码: $student = new Student(); $student->name = "Gregg"; $student->surname = "Smith"; $student->gender = "Male"; $student->save();
save()
假设我有以下代码:
$student = new Student();
$student->name = "Gregg";
$student->surname = "Smith";
$student->gender = "Male";
$student->save();
然后我的学生
活动记录模型我有以下内容:
public function afterSave()
{
$this->assignStudent($this->id);
}
$this->id
保存后不是正确的id。我可以看到日志中的ID为1416253
,而数据库中该记录的ID为670336
。这样的事情怎么会发生
更新
我做了更多的调查,似乎$this->id是通过在执行插入后重新分配最后一个插入id来分配的。除了它没有返回
save()
insert的ID,而是返回先前完成的插入的ID(所涉及的插入是在log
表中)。这意味着,根据系统,对student表的插入没有正确发生(即使是这样,因为我可以在DB中看到记录) 我不知道怎么会出现错误的id。错误的id是否与表的另一条记录匹配
你有没有尝试过这样的东西来确保它是最新的
public function afterSave()
{
$this->refresh();
$this->assignStudent($this->id);
}
此外,文档中还声明“重写此方法时,请确保调用父实现,以便触发事件”()。因此,我认为正确的写作方式可能是:
public function afterSave($insert, $changedAttributes)
{
parent::afterSave($insert, $changedAttributes);
$this->refresh();
$this->assignStudent($this->id);
}
我刚更新了一下。为ActiveRecord设置的ID是
log
表中日志项的ID(我在日志中看到的是上一次插入,ID排成一行)。我不知道这是怎么发生的。好的,发布更新。那么,$student-save()
返回什么呢?(应为true
或false
)。您是否尝试在保存后执行$student->refresh()
?@Matrefresh
不起作用,因为它基本上只是使用ID进行选择,这是不正确的。