0

我正在处理具有数百个字段的表,并且我需要一种方法让 yii 只处理字段的子集(读取和写入)。在 CActiveRecord 类中有没有办法做到这一点?

4

3 回答 3

4

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

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

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

在写作的同时,你必须聪明地知道你什么时候会写哪个领域。这可以用rulesin来完成model

定义scenario要对特定操作执行的规则和适当的验证。

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

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

适用scenario于模型规则。

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

还将规则仅应用于safe您要执行更新操作的那些字段。

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

安全规则也适用于场景;

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

于 2012-10-09T12:08:49.000 回答
2

看看defaultScope()函数CActiveRecord。它允许您指定添加到所有SELECT查询的条件。

您将像这样覆盖该函数:

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

阅读:

http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes

于 2012-10-09T10:31:53.103 回答
1

根据这个 SO 问题:Calling a database view in Yii using Active Record您可以使用数据库视图使您的模型仅基于您需要的列。

然后,您将不得不通过此视图找到一种写入(插入和更新)的方法,我相信有多种方法可以确保这一点。

于 2012-10-09T15:42:36.960 回答