模型类的“保存”方法工作很长

时间:2017-07-31 09:08:14

标签: php mysql yii yii2 yii2-model

我在控制器中有这样的方法,简单地将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调用之前的代码 为什么会这样?

1 个答案:

答案 0 :(得分:0)

问题解决了。在模型类中覆盖afterSave方法中找到了原因。