Yii 2.0 数据保存的心得(model->save)

为什么80%的码农都做不了架构师?>>>   hot3.png

之前在使用yii 2.0的时候,我的数据新增是这样的,都是写在了controller里面

xxxController.php

$data = Yii::$app->request->post();

if (empty($data['id'])) {
	$model = new Model();
	//补充新增的时候需要的数据,例如addtime,status
} else {
	//补充更新的时候需要的数据,例如update
	$model = Model::findOne($data['id']);
}
$model->attributes = $data;
if ($model->validate()) {
	if ($model->save()) {
		return true;
	}
} else {
	return false;
}

这样我就必须在每一个数据新增的时候都写数据的补充,这些代码都是重复的,而且写在controller里面是十分不好的

后面发现了如果我写在model里面,会有不错的效果

xxxModel.php


public function beforeSave($insert) {
	if (parent::beforeSave($insert)) {
		if ($this->isNewRecord) {
			$this->add_time = date('y-m-d H:m:s');
			$this->status = 1;
		} else {
			$this->update_time = date('y-m-d H:m:s');
		}
		return true;
	} else {
		return false;
	}
}

我只要调用到这里这这个方法,就会在save的时候触发上面的beforeSave,这样就可以完成数据的填充,而且是在数据验证以后再填充,而且最重要的一点,我如果把这些都写在了一个公共的model里面,只有我有数据填充并且是一样的,我就都不用写的,直接用就可以了
public function dataSave($data) {
	$this->load($data, '');
	if ($this->validate()) {
		if ($this->save()) {
			return ['code' => '1', 'msg' => '保存成功'];
		}
	} else {
		return ['code' => '0', 'msg' => $this->getFirstErrorsMessage()];
	}
	return ['code' => '0', 'msg' => '保存失败'];
}

转载于:https://my.oschina.net/gcdong/blog/1120364

你可能感兴趣的:(php)