Модель Yii проверяется, но данные не могут быть сохранены - PullRequest
3 голосов
/ 04 января 2012

У меня есть приложение yii. Данные проверены правильно. $model->validate() возвращает истину, но данные не сохраняются. Есть ли способ, который я знаю об ошибке. Это ничего не делает. не печатает ни ошибку, ни предупреждение.

if (isset($_POST['Invoice'])) {
    $model->validate();
    $model->attributes = $_POST['Invoice'];
    if (!$model->validate()) {
        die(CVarDumper::dump($model->errors,10,true));
    }

    if ($model->save()) {
        die("Data saved");
        $this->redirect(array('view', 'id' => $model->id));
    } else {
        CVarDumper::dump($model->attributes,10,true);
        CVarDumper::dump($model->errors,10,true);
    }
}

Ответы [ 10 ]

9 голосов
/ 05 июля 2012

если вы переопределите метод beforeSave или afterFind в вашей модели,

public function beforeSave() {
    return true; //don't forget this
}

public function afterFind() {
    return true; //don't forget this
}

убедитесь, что вы вернули true для этих функций

6 голосов
/ 04 января 2012

Если save () возвращает true и нет ошибок как таковых в вашей базе данных и запросах. Единственное, что возможно, это то, что вы не пометили некоторые столбцы безопасными для массового назначения через "$ model-> attribute".

Убедитесь, что столбец, который вы пытаетесь сохранить, помечен как безопасный в функции "правил" в вашей модели. Вы можете пометить столбцы как безопасные, добавив следующее правило в функцию "rules" в модели.

  array ( "column_name1, column_name2 ....." , "safe" ) 
5 голосов
/ 26 июля 2012

Если у вас есть эта проблема, вы замените это:

$model->save(false)

Это решит вашу проблему.

Если вы используете $model->save();, фильтры работают, что вам не подходит.

5 голосов
/ 24 июля 2012

Я только что столкнулся с чем-то похожим на это. Все проверялось правильно, и $ model-> save () возвращало true, но в базе данных не было сохранено данных.

Проблема и решение были в том, что я создавал объект $ model следующим образом:

$model = ClassName::model();

но вам нужно создать объект примерно так:

$model = new ClassName;
1 голос
/ 04 января 2012

Запустите протоколирование и посмотрите, что происходит ...

0 голосов
/ 08 мая 2018

Проблема для меня заключалась в том, что у меня было свойство для имени столбца в классе ActiveRecord, поэтому оно не сохранялось.

Не следует объявлять свойства для имен столбцов, так как я предполагаю магические методы __get() и __set() используются для сохранения данных, я полагаю, проверяя, есть ли изменения столбцов, когда вы нажимаете метод save(), чтобы избежать бесполезных запросов SQL.В моем случае, поскольку столбец был объявленным пользователем свойством, его не было в списке столбцов, и поэтому изменения в нем не были обнаружены.

Надеюсь, это поможет другим людям

0 голосов
/ 05 июля 2012

Также не переопределяет конструктор вашей модели:

function __construct() { } // don't do this

0 голосов
/ 29 апреля 2012

Я получил ту же ошибку, когда я использовал reCaptcha. Я просто сделал это, и это сработало:

$model->scenario = NULL;

Убедитесь, что вы делаете это ПОСЛЕ проверки.

0 голосов
/ 25 апреля 2012

У меня была такая же проблема, моя ошибка была с названием поста в контроллере, где я использовал $model->save.Я дал неправильно - if(isset($_POST['postname']))

0 голосов
/ 22 марта 2012

Если я не ошибаюсь, вы делаете AR save() в методе $model->save().Вы не получаете никакой ошибки, но данные также не сохраняются.Если это так, вы хотели бы сделать:

die(CVarDumper::dump($arObj->errors,10,true));

после вызова $arObj->save();.В большинстве случаев это происходит из-за отклонения базой данных значений, предоставленных для вставки или обновления.

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