---
title: "Події моделей - хуки в життєвий цикл Eloquent"
url: https://laravelukraine.com/blog/podiyi-modelei-xuki-v-zittjevii-cikl-eloquent
date: 2026-07-23
---

# Події моделей - хуки в життєвий цикл Eloquent

Треба надіслати email після реєстрації? Або залогувати видалення поста?

Model Events дозволяють підключатися до create/update/delete.

**Доступні події:**

* `creating` / `created`
* `updating` / `updated`
* `deleting` / `deleted`
* `saving` / `saved`

**Два підходи:**

* Окремі слухачі (listeners)
* `booted()` у моделі (швидкий варіант)

Порада: використовуйте `creating` для генерації UUID/slug до збереження.

```php
class User extends Model
{
  protected static function booted()
  {
    // Перед створенням
    static::creating(function ($user) {
      $user->uuid = Str::uuid();
    });

    // Після створення
    static::created(function ($user) {
      $user->sendWelcomeEmail();
    });

    // Перед видаленням - каскад
    static::deleting(function ($user) {
      $user->posts()->delete();
    });

    // Повернення false скасовує операцію
    static::creating(function ($user) {
      if ($user->isBanned()) {
        return false;
      }
    });
  }
}
```

```php
// Оновлення пов'язаних моделей
class Order extends Model
{
  protected static function booted()
  {
    static::created(function ($order) {
      $order->user->increment('total_orders');
    });

    static::deleted(function ($order) {
      $order->user->decrement('total_orders');
    });

    static::updating(function ($order) {
      if ($order->isDirty('status')) {
        ActivityLog::create([
          'order_id' => $order->id,
          'old_status' => $order->getOriginal('status'),
          'new_status' => $order->status,
        ]);
      }
    });
  }
}
```
