Yii - 对属性模型分配做出反应

时间:2014-04-21 14:44:13

标签: php yii

我想在Yii中执行以下操作:

When the attribute `a` in my model class `M` is set, do something.

尝试使用像setA($value)这样的setter但是没有调用它,因为Yii CActiveRecord首先检测属性是否存在于数据库中(并指定它),如果它存在,则数据库中不存在(即它不是表属性),然后查找正常的实例变量。最后的后备是调用属性访问者。

编辑 - 我的解决方案顺序错了:查找似乎首先是实例变量,然后是属性,最后是访问者 - 无论如何,我的问题仍然是一样的因为如果不存在具有该名称的数据库字段,则解析访问者)

Here它显示了__set的内部机制(有点上层,__ get)。

问题:如何反转订单,至少对某个属性?这意味着:我实际上想要使用像setA($value)这样的setter来捕获数据库字段版本,执行字段分配(即实际的$ this-> a,但是它应该在没有陷入堆栈溢出错误的情况下完成)在setA方法

1 个答案:

答案 0 :(得分:2)

合理的方法是覆盖模型类中的CActiveRecord::setAttribute,使其按照您需要的方式运行:

class M extends CActiveRecord {
  ....
  public function setAttribute($name,$value) {
    if($name === 'a') {
      .. do something
    }

    return parent::setAttribute($name, $value);
  }
  ....
}