Події життєвого циклу моделі:
| Операція | Події по порядку |
|---|---|
створення (save нової моделі) |
saving → creating → INSERT → created → saved |
оновлення (save існуючої) |
saving → updating → UPDATE → updated → saved |
| видалення | deleting → DELETE → deleted (з SoftDeletes ще trashed) |
відновлення (restore) |
restoring → restored (з проміжними saving/updating) |
| остаточне видалення | forceDeleting → forceDeleted |
| завантаження з бази | retrieved |
replicate() |
replicating |
Події «до» (-ing) можуть скасувати операцію: якщо слухач поверне false, запис не відбудеться, а save() поверне false.
saving проти creating/updating: saving - для логіки, однакової при створенні й оновленні (нормалізація, генерація slug); creating - лише для нових записів (встановити автора).
Оновлення без змін не спричиняє updating/updated: якщо жоден атрибут не змінився (isDirty() порожній), запит не виконується. Але saving і saved спрацьовують.
Що НЕ запускає події:
Post::where('status', 'draft')->update(['status' => 'archived']); // масове оновлення
Post::where('created_at', '<', $date)->delete(); // масове видалення
Post::insert([...]);
Post::upsert([...], ...);
Запит іде напряму в базу, моделі не завантажуються, тож спостерігачі не дізнаються про зміни. Це часте джерело багів: «кеш оновлюється при редагуванні, але не при масовій архівації».
Зберегти без подій:
$post->saveQuietly();
$post->updateQuietly(['views' => $post->views + 1]);
$post->deleteQuietly();
Post::withoutEvents(function () {
// усі операції всередині - без подій
});
Корисно для технічних оновлень (лічильники переглядів), міграцій даних і сидерів.
Події й транзакції: подія created спрацьовує до коміту транзакції. Якщо слухач ставить завдання в чергу, воркер може почати його раніше, ніж дані стануть видимими, або транзакція відкотиться після відправленого листа. Рішення - спостерігач з інтерфейсом ShouldHandleEventsAfterCommit чи afterCommit для завдань.
Порада: логіку, без якої дані некоректні, краще тримати явно в сервісі чи дії, а події - для побічних ефектів (кеш, індекс, аудит). Інакше поведінка залежить від того, яким методом збережено модель.