Php Yii中的CActiveRecord是否有办法只处理一个表中的字段子集?

Php Yii中的CActiveRecord是否有办法只处理一个表中的字段子集?,php,yii,Php,Yii,我正在处理有数百个字段的表,我需要一种方法让yii只处理读取和写入字段的子集。在CActiveRecord类中有这样做的方法吗?看看CActiveRecord的功能。它允许您指定添加到所有SELECT查询的条件 您可以像这样重写函数: public function defaultScope() { // by default only select records with type = 1 return array( 'condition' => 'ty

我正在处理有数百个字段的表,我需要一种方法让yii只处理读取和写入字段的子集。在CActiveRecord类中有这样做的方法吗?

看看CActiveRecord的功能。它允许您指定添加到所有SELECT查询的条件

您可以像这样重写函数:

public function defaultScope() {
    // by default only select records with type = 1
    return array(
        'condition' => 'type = 1',
    );
}
阅读:


在一个表中有数百个字段并不更好

无论如何,使用Yii可以读取和写入字段子集。 我可以用CDbCriteria来展示

而写作的时候你必须聪明,知道你会在哪个领域写作。 这可以通过模型中的规则来完成

定义要对特定操作执行的规则和正确验证的场景

在调用$model->save方法之前设置场景

将场景应用于模型规则

// You rule in model
array('email','email','on'=>'mystep1')
还将安全规则仅应用于要对其执行更新操作的字段

array('email, id, name','safe')
安全规则也适用于场景

注:
使用场景,您可以保存或更新表的特定字段,但您必须在默认情况下指定表的列为空。

根据这个SO问题:您可以使用数据库视图仅基于所需的列创建模型


然后,您必须找到一种通过该视图编写insert&update的方法&我相信有多种方法可以确保这一点

谢谢你的回答,我的问题是更新很多字段会大大降低速度,我认为这个解决方案会加快速度?不,在这种情况下,我希望限制列数,而不是行数。这是一个有点老的主题,但实际上这就是你要找的。只需更改条件以选择并写下所需的列。公共函数defaultScope{return array'select'=>'column1,column2',;}是的,视图是另一种解决方案,但在这种情况下,我的视图名称是动态的,这很棘手……我不确定我是否理解您的意思,但可以使用准备好的语句设置数据库视图以确保一致性
// You rule in model
array('email','email','on'=>'mystep1')
array('email, id, name','safe')