0

Component プロパティを持つ Model があります。この値は、このモデルを初期化/取得するたびに事前に計算する必要があります (それを生成する関数があります)。

この「デフォルト値」をプロパティのゲッターに配置しました。

public function getCid(){
    if ($this->_cid == null ){
        $this->_cid = generateCid();
    }
    return $this->_cid;
}

私がそれを呼び出すと、そのgetメソッドは適切に機能しています:

$model->cid; //returns good value

しかし、getAttributes()関数を使用して他のパラメーターで取得しようとすると、getメソッドが呼び出されません。

$model->getAttributes(array('cid')); //just to try only this property.

アプリにさらに多くのプロパティがあり、高速なソリューションを探しているため、配列をだまして値を個別に取得$model->cidし、それを戻り配列にマージしたくありません。getAttributes

では、このジェネレーターをどこに移動する必要がありますか、またはこの生成された ID を簡単に取得するには何を変更する必要がありますか?

アップデート:

を拡張するベース ActiveRecord クラスを作成しCActiveRecord、次の関数を追加しました。

public function getAttributes($names=true){
    $base = parent::getAttributes($names);
    foreach($base as $key => $value)
        if(!$this->hasAttribute($key))
            $base[$key] = $this[$key];

    return $base;
}

これにより、追加されたすべての属性の get メソッドが呼び出されるため、コンテンツが更新されます。

4

1 に答える 1

1

あなたの実際のモデルはCActiveRecordモデルですか?

CModel::getAttributes()の一部として表示される内容に基づいて、モデルの種類に応じてこれを処理するさまざまな方法があります。

しかし、それを処理する最も簡単な方法は、おそらくモデルでオーバーライドし、渡した配列に値が見つかったgetAttributes場合にゲッターへのカスタム呼び出しを行うことです。'cid'

おそらく、CActiveRecord::getAttributes()を参照してアイデアを見つけ、それをオーバーライドしてparent::getAttributes()から、カスタム オーバーライドから自分の を呼び出すことをお勧めします。

于 2013-06-13T20:06:28.693 に答える