В моей системе я хочу, чтобы средство всегда копировало старую запись в другую таблицу, прежде чем фактическая таблица получит обновление.
Так что администратор может видеть новые данные и старые данные (чтобы вести учет старых и новых значений)
для этого я использую 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
он возвращает мне новое значение (новое имя).
но как я могу получить доступ к старым данным (старое имя), чтобы я мог сохранить их в другую таблицу перед обновлением.
Или любое другое предложение, достигающее этого, полезно.
Вы можете использовать метод $this->getOldAttribute($name)
где name — это имя атрибута, значение которого вы хотите получить.
Есть также метод $this->getOldAttributes()
, которые возвращают массив со старыми значениями атрибута (пары имя-значение).
Других решений пока нет …