我正在处理具有数百个字段的表,并且我需要一种方法让 yii 只处理字段的子集(读取和写入)。在 CActiveRecord 类中有没有办法做到这一点?
问问题
1014 次
3 回答
4
在一个表中有数百个字段并不是更好。
无论如何,使用 Yii 可以读取和写入字段子集。我可以用CDbCriteria
.
$criteria = new CDbCriteria;
$criteria->select = 'field1, field2'; // specify fields you want to read
在写作的同时,你必须聪明地知道你什么时候会写哪个领域。这可以用rules
in来完成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 回答