我正在尝试使用以下规则更新yii 1.1中的某些字段,但它无法正常工作.
public function rules()
{
return [
['CreatedOn','default','value'=>time(),'isEmpty'=>true,'on'=>'insert'],
['CreatedBy','default','value'=>\Yii::$app->user->identity->id,'isEmpty'=>true,'on'=>'insert'],
['ModifiedOn','default','value'=>time(),'isEmpty'=>true,'on'=>'update'],
['ModifiedBy','default','value'=>\Yii::$app->user->identity->id,'isEmpty'=>true,'on'=>'update'],
];
}
Run Code Online (Sandbox Code Playgroud)
我期待更新CreatedBy和CreatedOn插入时,并ModifiedBy和ModifiedOn更新的时候.
top*_*her 13
来自soju的优秀答案,与Yii2:
默认情况下,模型仅支持名为的单个方案
default
因此,您应该在控制器中手动设置方案,即:
$model->scenario = 'insert';
Run Code Online (Sandbox Code Playgroud)
您也可以使用when而不是onie:
['CreatedOn', 'default', 'value'=>time(), 'isEmpty'=>true, 'when'=>
function($model) { return $model->isNewRecord; }
],
['ModifiedOn', 'default', 'value'=>time(), 'isEmpty'=>true, 'when'=>
function($model) { return !$model->isNewRecord; }
],
Run Code Online (Sandbox Code Playgroud)
设置它们的另一种方法rules()是使用beforeSave()它们来设置它们:
public function beforeSave($insert) {
if ($insert) {
$this->CreatedBy = \Yii::$app->user->identity->id;
$this->CreatedOn = time();
} else {
$this->ModifiedBy = \Yii::$app->user->identity->id;
$this->ModifiedOn = time();
}
return parent::beforeSave($insert);
}
Run Code Online (Sandbox Code Playgroud)