モデルの 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()
ますか?