YII2.0 在保存数据库内容会调用save()方法的注意事项

在保存数据时,有事会用$model的beforSave()方法来添加模型的 创建时间create_time,更新时间update_time等字段,如下所示

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        if ($insert) {
            $this->create_time = time();
            $this->update_time = time();
        
        } else {
            $this->update_time = time();
        }
        return true;
    } else {
        return false;
    }
}

需要特别注意的时,这样做虽然方便了,但前往不要忘记更改模型文件的ruls()方法,尤其是喜欢用gii生成代码的同学,

 public function rules()
    {
        return [
            [['imei','create_time', 'update_time'], 'required'],
            [['create_time', 'update_time', 'check_time'], 'integer'],
            [['imei'], 'string', 'length' => 15],
            [['network_address'], 'string', 'length' => 4],
            [['text'], 'string', 'max' => 255],
        ];
    }

该方法会在save()方法之前对数据进行正确的验证,也就是说,需要把上面代码中红色标注的字段create_time,update_time等字段删除掉,这样就不会在进行验证了,如果不去掉,在调用

$model->load(Yii::$app->request->post())之后,调用$model->save()时,会默认调用$model->validate()对$model进行验证,这里就会被卡主,
$model->save()就肯定也是保存失败了,模型中的beforeSave()方法根本就没有机会执行,切记,切记,切记
原文地址:https://www.cnblogs.com/iceman-/p/8691519.html