我有一个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)
如果你在模型中覆盖beforeSave或afterFind方法,
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
如果save()返回true,则数据库和查询中没有错误.唯一可能的是,你没有通过"$ model-> attributes"标记一些用于质量分配的列安全.
确保您尝试保存的列在模型的"规则"功能中标记为安全.您可以通过在模型中的"规则"功能中添加以下规则来标记列安全.
array ( "column_name1, column_name2 ....." , "safe" )
我刚刚遇到类似的事情.一切都正确验证,$ 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();的过滤器正在运行,那对您不利.
| 归档时间: |
|
| 查看次数: |
15758 次 |
| 最近记录: |