我在模型的 beforeSave 上引发了一个 Yii 事件,只有在模型的特定属性发生更改时才应该触发该事件。
目前我能想到的唯一方法是创建一个新的 AR 对象并使用当前 PK 查询旧模型的数据库,但这并没有得到很好的优化。
这是我现在所拥有的(请注意,我的表没有 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()
?