Метод getChanges
Метод getChanges применяется к экземпляру модели Eloquent и возвращает массив изменённых атрибутов с их новыми значениями. В отличие от метода getDirty, который показывает только те поля, которые были изменены, но ещё не сохранены, getChanges возвращает изменения, которые уже были применены к модели после вызова метода save. Если модель не была сохранена после изменения, метод вернёт пустой массив. Метод полезен для отслеживания истории изменений, отправки уведомлений или аудита данных.
Синтаксис
<?php
$model->getChanges();
?>
Пример
Давайте получим изменения модели после сохранения:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
class ArticleController extends Controller
{
public function index()
{
$article = Article::find(1);
$article->title = 'New article title';
$article->save();
$changes = $article->getChanges();
foreach ($changes as $key => $value) {
echo $key . ': ' . $value;
}
}
}
?>
Результат выполнения кода:
"title: New article title"
"updated_at: 2026-09-07 10:15:30"
Пример
Метод getChanges возвращает только те поля, которые были изменены. Если поле было изменено, но его новое значение совпадает со старым, оно не будет включено в результат:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
class ArticleController extends Controller
{
public function index()
{
$article = Article::find(2);
// Изменяем поле
$article->status = 'draft';
$article->save();
$changes = $article->getChanges();
if (empty($changes)) {
echo 'No changes';
} else {
foreach ($changes as $key => $value) {
echo $key . ': ' . $value;
}
}
}
}
?>
Результат выполнения кода:
"status: draft"
"updated_at: 2026-09-07 10:20:15"
Пример
Метод getChanges работает только после сохранения модели. Если изменения не были сохранены, метод вернёт пустой массив:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
class ArticleController extends Controller
{
public function index()
{
$article = Article::find(3);
$article->content = 'New content text';
// Изменения ещё не сохранены
$changes = $article->getChanges();
if (empty($changes)) {
echo 'Changes not saved yet';
} else {
foreach ($changes as $key => $value) {
echo $key . ': ' . $value;
}
}
// Сохраняем изменения
$article->save();
$changesAfterSave = $article->getChanges();
echo 'Changes after save: ';
foreach ($changesAfterSave as $key => $value) {
echo $key . ': ' . $value;
}
}
}
?>
Результат выполнения кода:
"Changes not saved yet"
"Changes after save: content: New content textupdated_at: 2026-09-07 10:25:00"
Смотрите также
-
метод
getDirty,
который возвращает изменённые атрибуты до сохранения -
метод
isDirty,
который проверяет, были ли изменены атрибуты -
метод
wasChanged,
который проверяет, были ли атрибуты изменены во время последнего сохранения -
метод
getOriginal,
который возвращает оригинальные значения атрибутов