2012-12-27 99 views
0

比方說,我有一個Widget表和Yii Model類。Yii創建一個無法保存的模型實例

我想能夠實例化它($tempWidget = new Widget),但不知何故確保它不能保存到數據庫。我想使用該模型只是爲了用戶測試的東西,模擬...

顯然,我可以避免打電話$tempWidget->save(),但我想某種形式的標誌,防止保存保存,以防萬一代碼的其他部分試圖這樣做。

+1

重新實現所有保存方法('save()','insert()','update()',可能還有其他方法)在調用其父實現之前檢查該標誌的狀態。 – DCoder

回答

0

有幾種方法可以完成你想要的。最簡單的方法是修改模型beforeSave()方法來防止模型能夠通過使用CModel unsetAttributes方法,例如你重置所有屬性保存:

public function beforeSave(){ 
    $this->attributes = $this->unsetAttributes(); 
} 

,如果你有這個模型相關的規則這隻會工作必須填寫字段(至少一個必填字段),否則這將在您的表中創建僅由主鍵組成的條目(假設PK是自動遞增的)。

+0

您不必取消設置屬性。簡單地返回false應該能夠做到這一點。其實,我相信不要調用parent :: beforeSave()應該足夠了。 – MrSoundless

+0

聽起來很有趣。當我想要時,我怎麼才能觸發這個?例如像'新的小工具('temp')'?在正常情況下,'新的Widget'我想要它像正常保存當然。 –

相關問題