2012-01-04 3 views
2

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

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); 
    } 
} 
+0

Пожалуйста, взгляните на эти ответы, может быть, причина вашей ошибки в одном. –

ответ

5

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

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

 
    array ("column_name1, column_name2 ....." , "safe") 
+2

Не правда ли: array ("column_name1, column_name2, .....", "safe") – stratosgear

+0

К сожалению, спасибо за напоминание :) –

1

Пожар на некоторые logging и посмотреть, что происходит ...

0

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

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

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

0

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

0

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

$model->scenario = NULL;

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

9

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

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

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

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

0

Также не переопределить модель конструктора:

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

5

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

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

$model = ClassName::model(); 

но вы должны создать объект так:

$model = new ClassName; 
+0

Спасибо тонну. Это была настоящая жизнь. Я боролся за это с того дня, и, наконец, ваш ответ решил мою проблему. Большое большое спасибо. – Prazi

+0

Идеальное решение –

5

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

$model->save(false) 

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

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

+0

Это совершенно неправильно! Используя этот код, вы сохраните модель без проверки ее! http://www.yiiframework.com/doc/api/1.1/CActiveRecord#save-detail –

Смежные вопросы