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

时间:2018-03-22 09:07:03

标签: php object yii2 before-save

在我的系统中,我想要一个设施,它应该在实际表获得更新之前始终将旧记录复制到另一个表中。

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

我使用beforeSave()方法

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

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

在更新的情况下,我注意到$this返回旧记录和新记录

$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,则会返回新值(新名字)。 但是如何才能访问旧数据(旧的名字),以便我可以在更新之前将其保存到另一个表中。

或任何其他建议实现这一点很有帮助。

1 个答案:

答案 0 :(得分:3)

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

还有方法$this->getOldAttributes(),它返回带有旧属性值(名称 - 值对)的数组。