Yii中的CActiveRecord是否有办法仅使用一个表中的字段子集?

时间:2012-10-09 10:14:29

标签: php yii

我正在处理具有数百个字段的表,我需要一种方法让yii只使用一部分字段(读取和写入)。有没有办法在CActiveRecord类中这样做?

3 个答案:

答案 0 :(得分:4)

表中有数百个字段并不是更好。

无论如何阅读& Yii可以写字段子集。 我可以用CDbCriteria显示它。

$criteria = new CDbCriteria;
$criteria->select = 'field1, field2'; // specify fields you want to read

写作时你必须聪明你将在什么时候写的字段。 可以使用rules中的model完成此操作。

定义规则的scenario&要对特定操作执行的正确验证。

在调用$model->save()方法之前设置scenarion。

// Set scenarion
$model->setScenario('mystep1');

scenario应用于模型规则。

// You rule in model
array('email','email','on'=>'mystep1')

同样将safe规则应用于您要执行更新操作的字段。

array('email, id, name','safe')

安全规则也适用于场景;

注意: 使用方案,您可以保存或更新表的特定字段,但您必须指定表的列默认为NULL。

答案 1 :(得分:2)

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

你会覆盖这样的函数:

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

电文读出:

defaultScope()

答案 2 :(得分:1)

根据这个问题:Calling a database view in Yii using Active Record您可以使用数据库查看,仅根据您需要的列生成模型。

然后你必须通过这个视图找到一种方法(插入和更新)&我相信有多种方法可以确保这一点。