-1

\yii\db\ActiveRecord我已经用我自己的班级覆盖了现有的。我覆盖的方法是beforeSave(). 我已阅读有关用法的文档。但是我发现它在检查记录是否是新记录时被调用了两次。

这是我的代码:

class ActiveRecord extends \yii\db\ActiveRecord{
    public $count = 0;
    public function beforeSave($insert) {
        print($this->count++); //i try to investigate it deeper using this "count" property
        if(parent::beforeSave($insert)){
            if($this->isNewRecord){
                print("123"); //this printed out
                if($this->hasAttribute('user_create')){
                    $this->user_create = \Yii::$app->user->identity->id;
                }
                if($this->hasAttribute('time_create')){
                    $this->time_create = new \yii\db\Expression('now()');
                }
            }
            else{
                print("456"); //and this is also
                if($this->hasAttribute('user_upd')){
                    $this->user_upd = \Yii::$app->user->identity->id;
                }
                if($this->hasAttribute('time_upd')){
                    $this->time_upd = new \yii\db\Expression('now()');
                }
            }
            return true;
        }else{
            return false;
        }
    }
}

当我保存新记录时的代码输出如下

01231456
4

1 回答 1

0

我在控制器端犯了一个错误,这是我的代码

 public function actionCreate() {
    $model = new Grup();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        if ($model->save()) {
            echo Json::encode(array('status' => 1));
        } else {
            echo Json::encode(array('status' => 0, 'message' => \kartik\widgets\ActiveForm::validate($model)));
        }
    } else {
        return $this->renderAjax('create', [
                    'model' => $model,
        ]);
    }
}

我不应该使用 $model->save() 两次。

于 2015-09-14T08:13:47.593 回答