2012-01-04 65 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

请看看这些答案,也许你的错误原因是在一个他们。 – 2012-07-13 09:12:50

回答

5

如果保存()是返回true,并有在你的数据库和查询没有错误本身。唯一可能的是,您没有通过“$ model-> attributes”标记一些安全批量分配列。

确保您试图保存的列在模型的“规则”功能中标记为安全。您可以通过在模型中的“规则”功能中添加以下规则来标记栏。

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

是不是:数组(“column_name1,column_name2,.....”,“安全”) – stratosgear 2012-01-04 16:25:06

+0

对不起,感谢提醒:) – 2012-01-04 19:26:37

1

火了一些logging,看看怎么回事...

0

如果我没看错,你在$model->save()方法做一个AR save()。您不会收到任何错误,但数据也不会保存。 如果是这样的话,你想办一个:

die(CVarDumper::dump($arObj->errors,10,true)); 
$arObj->save();电话后

。大多数情况下,这是因为数据库拒绝为插入或更新提供的值。

0

我有同样的问题,我的错误是在控制器中的帖子名称,我用$model->save。我给错了 - if(isset($_POST['postname']))

0

我在使用reCaptcha时遇到了同样的错误。我只是做这个和它的工作:

$model->scenario = NULL;

确保你做到这一点确认之后。

9

,如果你在你的模型覆盖beforeSaveafterFind方法,

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

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

确保您返回true这些功能

0

而且重写你的模型构造:

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

5

我刚碰到类似的东西。一切都正确验证,$ model-> save()返回true,但没有数据保存在数据库中。

的问题和解决方案是我创建像这样的$模型对象:

$model = ClassName::model(); 

但你需要创建对象,像这样:

$model = new ClassName; 
+0

感谢吨。这真的是一种拯救生命的方式。有一天我为它奋斗,最终你的回答解决了我的问题。非常感谢。 – Prazi 2013-08-02 09:23:38

+0

完美解决方案 – 2015-03-15 20:24:16

5

如果你有这个问题,你取代这个:

$model->save(false) 

这解决了你的问题。

如果您使用$model->save();过滤器正在运行,对您不利。

+0

这完全错了!使用此代码,您将保存模型而不验证它! http://www.yiiframework.com/doc/api/1.1/CActiveRecord#save-detail – 2015-12-12 10:58:25