Функция getChanges()
возвращает измененные поля модели после сохранения:
public function testGetChanges()
{
AnyModel::create([
'name' => 'Test',
'content' => 'any text ...',
]);
$model = AnyModel::first();
$model->name = 'New test';
$model->save();
$this->assertEquals($model->getChanges(), ['name' => 'New test']);
После следующего обновления getChanges
удаляет предыдущие изменения и выводит новые:
$model->name = 'Test2';
$model->update();
$this->assertEquals($model->getChanges(), ['name' => 'Test2']);
}
Функция getOriginal()
возвращает все поля в неизменном виде до сохранения:
public function testGetOriginal()
{
AnyModel::create([
'name' => 'Test',
'content' => 'any text ...',
]);
$model = AnyModel::first();
$model->name = 'New test';
$this->assertEquals($model->getOriginal('name'), 'Test');
$model->save();
После сохранения метод getOriginal
возвращает новые значения:
$this->assertEquals($model->getOriginal('name'), 'New test');
}
Метод getOriginal()
по умолчанию возвращает все поля модели, если вам нужно только одно, используйте getOriginal('field_name')
. Для работы только с измененными полями можно сделать примерно так:
foreach ($model->getChanges() as $key => $value) {
$originals[$key] = $model->getOriginal($key);
}
В итоге массив $originals
будет содержать оригинальные значения измененных полей. Разумеется, это работает только до сохранения.
04.10.2019
Написать комментарий