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

Sha*_*imi 3 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Riz*_*han 9

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

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

public function afterFind() {
    return true; //don't forget this
}
Run Code Online (Sandbox Code Playgroud)

确保为这些功能返回true


Ris*_*ogi 6

如果save()返回true,则数据库和查询中没有错误.唯一可能的是,你没有通过"$ model-> attributes"标记一些用于质量分配的列安全.

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

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


ben*_*der 5

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

问题和解决方案是我正在创建$ model对象,如下所示:

$model = ClassName::model();
Run Code Online (Sandbox Code Playgroud)

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

$model = new ClassName;
Run Code Online (Sandbox Code Playgroud)


小智 5

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

$model->save(false)
Run Code Online (Sandbox Code Playgroud)

这解决了您的问题.

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