在yii中创建和更新时设置默认值

Nad*_*eem 5 yii2

我正在尝试使用以下规则更新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)

我期待更新CreatedByCreatedOn插入时,并ModifiedByModifiedOn更新的时候.

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)