Yii模型正在验证,但无法保存数据

时间:2012-01-04 05:18:44

标签: yii

我有一个yii应用程序。数据已正确验证。 $model->validate()返回true但未保存数据。有什么方法我知道错误。它什么都不做。既不打印错误也不打印任何警告。

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 个答案:

答案 0 :(得分:9)

如果您在模型中覆盖beforeSaveafterFind方法,

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

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

确保返回true 这些功能

答案 1 :(得分:6)

如果save()返回true并且数据库和查询中没有错误。唯一可能的是,你没有通过“$ model-> attributes”标记一些可以进行质量分配的列。

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

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

答案 2 :(得分:5)

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

问题和解决方案是我正在创建$ model对象:

$model = ClassName::model();

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

$model = new ClassName;

答案 3 :(得分:5)

如果您遇到此问题,请将其替换为:

$model->save(false)

这解决了您的问题。

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

答案 4 :(得分:1)

启动一些logging,看看发生了什么......

答案 5 :(得分:0)

如果我没有错,您正在save()方法中执行AR $model->save()。您没有收到任何错误,但数据也未保存。 如果是这种情况,你想做一个:

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

当我使用reCaptcha时,我遇到了同样的错误。我刚刚做了这件事并且有效:

$model->scenario = NULL;

确保在验证后执行此操作。

答案 8 :(得分:0)

不要覆盖您的模型构造函数:

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

答案 9 :(得分:0)

我的问题是我在ActiveRecord类中有一个列名属性,所以它没有保存。

你不应该声明列名的属性,因为我猜魔术方法__get()__set()用于保存数据,我想通过检查单击{{1时是否有列更改避免无用的SQL查询的方法。就我而言,因为该列是用户声明的属性,所以它不在列列表中,因此未检测到对它的更改。

希望这有助于其他人