我在控制器中有这样的方法,简单地将status
字段的值设置为0或1.
public function actionNews_status($id,$status){
$status = ($status==1)?1:0;
$number = false;
$news = News::findOne($id);
if(!is_null($news)){
$news->status = $status;
$number = $news->save();
Redis::rset($CACHE_mat, null);
}
return json_encode(['status'=>$number]);
}
事实证明,该方法可以工作约20秒。
我发现行$number = $news->save();
工作缓慢。
我在此行之前和之后使用exit
进行了检查。
我还发现status
字段本身会立即更新,因为对表的查询会立即显示更改。
但是save
方法在此之后继续工作很长时间。
status
字段定义为TINYINT(1)NULL DEFAULT 0
没有任何索引。
也许创建索引有助于修复它?
MySQL数据库,InnoDB。在表78701行。
更新
我发现了以下内容。
在afterSave
的末尾慢慢运行updateInternal
方法调用。
但在使用此调用的行之前,脚本会快速执行。
慢慢调用afterSave
本身,而不是afterSave
方法中的代码,而不是afterSave
调用之前的代码
为什么会这样?
答案 0 :(得分:0)
问题解决了。在模型类中覆盖afterSave
方法中找到了原因。