2012-08-14 66 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