Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ActiveRecord保存后设置的ID不正确_Php_Activerecord_Yii2 - Fatal编程技术网

Php ActiveRecord保存后设置的ID不正确

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();

所以我遇到了一个正在发生的奇怪的bug,但只是在某些时候。我似乎无法确定是什么导致了这一切的发生。基本上,我有一个ActiveRecord,它与数据库中的一个表相对应。我给一个对象赋值并调用
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()
?@Mat
refresh
不起作用,因为它基本上只是使用ID进行选择,这是不正确的。