在我的系统中,我想要一个设施,它应该在实际表获得更新之前始终将旧记录复制到另一个表中。
这样管理员也可以看到新数据和旧数据(以维护旧值和新值的记录)
我使用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
,则会返回新值(新名字)。
但是如何才能访问旧数据(旧的名字),以便我可以在更新之前将其保存到另一个表中。
或任何其他建议实现这一点很有帮助。
答案 0 :(得分:3)
您可以使用方法$this->getOldAttribute($name)
,其中name是您想要获取值的属性的名称。
还有方法$this->getOldAttributes()
,它返回带有旧属性值(名称 - 值对)的数组。