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()方法根本就没有机会执行,切记,切记,切记