8

モデルの beforeSave で Yii イベントを発生させています。これは、モデルの特定のプロパティが変更された場合にのみ発生します。

現時点でこれを行う唯一の方法は、新しい AR オブジェクトを作成し、現在の PK を使用して古いモデルの DB をクエリすることですが、これはあまり最適化されていません。

これが私が今持っているものです(私のテーブルにはPKがないことに注意してください。そのため、比較している属性以外のすべての属性でクエリを実行します-したがって、unset関数です):

public function beforeSave()
{
    if(!$this->isNewRecord){ // only when a record is modified
        $newAttributes = $this->attributes;
        unset($newAttributes['level']);
        $oldModel = self::model()->findByAttributes($newAttributes);

        if($oldModel->level != $this->level)
            // Raising event here
    }
    return parent::beforeSave();
}

より良いアプローチはありますか?古いプロパティを の新しいローカル プロパティに格納することはできafterFind()ますか?

4

4 に答える 4

1

Yii 1.1: yiiframework.comの mod-active-record

または、gist.github.com で「 ifModified then ...」ロジックと依存関係をクリアする Yii Active Record インスタンス

于 2014-08-19T19:57:51.813 に答える
0

モデルを再度ロードする代わりに、更新フォーム内の隠しフィールドを持つ古いプロパティを保存できます。

于 2013-08-27T09:27:21.673 に答える