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