如何从 beforeSave() 之前获取数据

how to get data from before beforeSave()

在我的系统中,我想要一个工具,它应该总是在实际 table 获得更新之前将旧记录复制到另一个 table。

以便管理员也可以看到新数据和旧数据(以维护新旧值的记录)

为此我使用beforeSave()方法

public function beforeSave($insert)
    {
        if (!parent::beforeSave($insert)) {
            return false;
        }

        echo "<pre>before save";print_R($this);die();
        return true;
    }

在更新案例中,我注意到 $this return 旧记录和新记录

$this 包含:

 app\models\Visitor Object (
     [_attributes:yii\db\BaseActiveRecord:private] => Array
         (
             [id] => 1
             [first_name] => new first name
             [last_name] => new last name
             [phone] => 987654321
             [created_at] => 0000-00-00 00:00:00
             [updated_at] => 0000-00-00 00:00:00
         )

     [_oldAttributes:yii\db\BaseActiveRecord:private] => Array
         (
             [id] => 1
             [first_name] => old first name
             [last_name] => old last name
             [phone] => 123456789
             [created_at] => 0000-00-00 00:00:00
             [updated_at] => 0000-00-00 00:00:00
         )

     [_related:yii\db\BaseActiveRecord:private] => Array
         (
         )

如果我使用 $this->first_name 它 return 我的新值(新名字)。 但是我如何访问旧数据(旧名字)以便我可以在更新之前将其保存到另一个table。

或实现此目的的任何其他建议都有帮助。

您可以使用方法 $this->getOldAttribute($name),其中名称是您要获取值的属性的名称。

还有方法 $this->getOldAttributes(),其中 return 数组具有旧属性值(name-value 对)。