2012-08-14 97 views
1

如果我只使用DAO在Yii中保存數據,我可以使用模型的規則功能嗎?當然,我不會宣佈AR實例。我仍然可以使用規則功能進行驗證嗎?Yii DAO實現。

+1

是的,你可以.... – NewUser 2012-08-14 12:35:30

回答

3

創建擴展CModel一個新的模型類。

正常情況下創建規則方法。

然後,您可以做

$model = new MyModel(); 
$model->myAttribute = 'value'; 

if ($model->validate()) 
{ 
    Yii::app()->db->createCommand() 
     ->update(
      'MyTable', 
      array('myAttribute' => $model->myAttribute), 
      'key=:id', 
      array(':id' => 'key') 
     ); 
} 
+0

但是這並不能擊敗性能調整的目的嗎? yii的權威指南「雖然Active Record擅長以OOP方式對數據進行建模,但實際上它會降低性能,因爲它需要創建一個或多個對象來表示每行查詢結果。」然而,在我應用程序我必須一次查詢單個用戶的記錄,記錄被分成9個表格左右。所以我會聲明很多模型實例。如果我使用模型實例進行驗證,爲什麼不保存呢? – 2012-08-14 21:24:01

+0

我的示例不使用活動記錄。它使用具有您要求的驗證功能的CModel類。 – Alex 2012-08-16 06:42:35

+0

因此,您的MyModel()類的聲明擴展CModel而不是CActiveRecord?除了使用createCommand保存它之外,這裏的用法與AR看起來沒有什麼不同?那麼AR如何不同呢? – 2012-08-16 07:07:29

0
+0

你能引導我到一個示例/文檔?我使用了AR實例的驗證規則,但從未使用過DAO。謝謝 !! – 2012-08-14 12:40:12

+0

發佈您的代碼,以便我們可以幫助您。 – FabianoLothor 2012-08-14 12:51:37

+0

好吧,在我開始使用實際編碼之前,我只是在制定策略。我閱讀了關於yii的權威指南,對於數據密集型應用,應該避免由於性能問題引起的AR。因爲我幾乎是一個業餘與yii我想確保我可以做必要的驗證,如果我從AR轉移到DAO,而不是自己設置驗證條件太多。我真的不知道如何驗證使用規則分開來自AR。 – 2012-08-14 13:02:12