私は何百ものフィールドを持つテーブルを扱っていますが、yii がフィールドのサブセット (読み取りと書き込み) のみを処理する方法が必要です。CActiveRecord クラスでこれを行う方法はありますか?
3 に答える
テーブルに何百ものフィールドがあるのは良くありません。
とにかく、フィールドのサブセットの読み書きは Yii で可能です。で表示できますCDbCriteria
。
$criteria = new CDbCriteria;
$criteria->select = 'field1, field2'; // specify fields you want to read
執筆中は、いつどのフィールドに書くかを賢くする必要があります。それはで行うことができrules
ます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 に指定する必要があります。
の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
このSOの質問によると、 Active Recordを使用してYiiでデータベースビューを呼び出すと、データベースビューを使用して、必要な列のみに基づいてモデルを作成できます。
次に、このビューを介して書き込み(挿入と更新)する方法を見つける必要があります。それを保証する方法は複数あると思います。