【问题标题】:Set base class attribute values while loading object / creating objects yii在加载对象/创建对象时设置基类属性值
【发布时间】:2015-10-03 22:24:09
【问题描述】:

我有两个继承自公共基类的模型。

class Batsmen extends CPlayer{
    batsmen_id      // model field.
    batsmen_name    // model field.
}

class Bowler extends CPlayer{
    bowler_id       // model field.
    bowler_name     // model field.    
}

// 组件类,作为模型击球手和投球手模型的基类。

class CPlayer extends CActiveRecord{
    public player_id;
    public player_name;
}

我想在加载对象时或创建对象后将 Batsmen/Bowler 的属性值加载到基类 CPlayer 属性中。我该怎么做?

【问题讨论】:

    标签: php yii base-class


    【解决方案1】:

    如果您想在模型加载后将 batsmen_id 设置为 player_id,请使用 afterFind 方法:

    protected function afterFind(){
      parent::afterFind();
      $this->player_id = $this->batsmen_id;
    }
    

    如果你只是初始化对象使用 init

    public function init(){
      parent::init();
      $this->player_id = $this->batsmen_id;
    }
    

    【讨论】:

    • 是的,我尝试使用 afterFind。但是在我 findByPk 之后它没有调用该事件。
    • findByPk 默认总是在Find 事件之后上升。所以你的类逻辑中可能存在错误
    • 是的。那是我的错误是使用 onAfterFind 而不是 afterFind。但是对于 init(),一旦我创建了一个新对象并保存它而不是设置父属性的值。
    • create object != save model :) 在 afterSave 中分配。带有 on* 的方法以另一种方式使用。
    猜你喜欢
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    相关资源
    最近更新 更多