0

私は何百ものフィールドを持つテーブルを扱っていますが、yii がフィールドのサブセット (読み取りと書き込み) のみを処理する方法が必要です。CActiveRecord クラスでこれを行う方法はありますか?

4

3 に答える 3

4

テーブルに何百ものフィールドがあるのは良くありません。

とにかく、フィールドのサブセットの読み書きは 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 に指定する必要があります。

于 2012-10-09T12:08:49.000 に答える
2

のdefaultScope()関数を見てくださいCActiveRecordSELECTすべてのクエリに追加される条件を指定できます。

次のように関数をオーバーライドします。

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の質問によると、 Active Recordを使用してYiiでデータベースビューを呼び出すと、データベースビューを使用して、必要な列のみに基づいてモデルを作成できます。

次に、このビューを介して書き込み(挿入と更新)する方法を見つける必要があります。それを保証する方法は複数あると思います。

于 2012-10-09T15:42:36.960 に答える