Yii isNewRecord ложно в beforeSave? - PullRequest
       9

Yii isNewRecord ложно в beforeSave?

5 голосов
/ 21 ноября 2011

Я сделал метод beforeSave в моей модели (расширяет GXActiveRecord), если isNewRecord никогда не запускается.Мой beforeSave () вызывается, хотя.

Когда я печатаю переменную $ this-> isNewRecord, она ложна.В любом случае, когда эта переменная установлена ​​в false?Я очень уверен, что это новое

public function beforeSave(){


        if(parent::beforeSave())
            {
              if($this->isNewRecord){
                    $this->setAttribute('doc_status','new');
                    print "something";
              }else{
                  $this->setAttribute('doc_status','updated');
              }
            return  true;
            }  else { return false;

    }

Ответы [ 3 ]

5 голосов
/ 04 апреля 2012

Ну, может быть, уже слишком поздно, чтобы ответить, но я просто хотел это выяснить, потому что это уже вызвало достаточно путаницы (по крайней мере, для меня) ...

Если вы позвоните parent::beforeSave()в beforeSave () вашей модели и после этого проверьте на isNewRecord, она всегда будет иметь значение false, потому что модель сохранена.

Ваша модель построена поверх класса фреймворка, поэтому, когдаВы переопределяете метод, сначала выполняете свою задачу, а затем вызываете родительский метод.Итак:

protected function beforeSave() {


if ($this->isNewRecord)
    //do something
else
    //do something else
/* some more code*/
parent::beforeSave();
return true;
}

Вы также можете вызвать parent beforeSave () следующим образом:

return parent::beforeSave();

или

return true && parent::beforeSave();

Надеюсь, что это поможет другим, кто найдет этот вопрос черезGoogle.

5 голосов
/ 21 ноября 2011

CActiveRecord-> isNewRecord имеет значение false, если вы никогда не сохраняли его ранее.

Например:

$model = new Product;
$model->name = uniqid("bar");
echo "isNewRecord?".$model->isNewRecord; // 1 (true)
$model->save();
echo "isNewRecord?".$model->isNewRecord; // (false)

$model = Product::model();
$model->name = uniqid("foo");
echo "isNewRecord?".$model->isNewRecord; // (false)
$model->save();
echo "isNewRecord?".$model->isNewRecord; // (false)
2 голосов
/ 02 декабря 2012

По крайней мере, в моем случае

print($this->isNewRecord);
print(parent::beforeSave());
print($this->isNewRecord);

печатает true в каждой строке.

И извините, я не знаю, как ответить на ответ выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...