Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Статті за тегом «Laravel»

Статті, новини, туторіали та переклади від учасників спільноти

No results.
Tips 23 липня 2026

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

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

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

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

  • creating / created
  • updating / updated
  • deleting / deleted
  • saving / saved

Два підходи:

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

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

7
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;
      }
    });
  }
}
// Оновлення пов'язаних моделей
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,
        ]);
      }
    });
  }
}
Tips 22 липня 2026

Eloquent Casts - автоматичне перетворення типів

База зберігає JSON як рядок. Ви всюди вручну робите decode.

Casts виконують перетворення типів автоматично. Ви працюєте з нативними типами PHP.

Поширені касти:

  • array / json - авто-encode/decode
  • boolean - 0/1 → true/false
  • date / datetime - об'єкти Carbon
  • encrypted - автоматичне шифрування/дешифрування

Кастомні касти:

Можна створювати власні для складніших перетворень.

Порада: використовуйте encrypted для чутливих даних (напр. номери карток).

6
class User extends Model
{
  protected $casts = [
    'email_verified_at' => 'datetime',
    'settings' => 'array',
    'is_admin' => 'boolean',
    'metadata' => 'json',
    'birth_date' => 'date',
    'salary' => 'decimal:2',
    'credit_card' => 'encrypted',
  ];
}

// JSON cast - працюємо з масивами
$user->settings = ['theme' => 'dark', 'lang' => 'en'];
$user->save(); // Зберігається як JSON-рядок

$theme = $user->settings['theme']; // Авто-декод

// Datetime cast - Carbon
echo $user->email_verified_at->diffForHumans();

// Boolean cast
if ($user->is_admin) {
  // 1/0 у базі, але в коді - true/false
}
SMS Catcher
Новини 22 липня 2026

Laravel SMS Catcher: Локальна Панель для Перехоплення SMS-Повідомлень

Laravel SMS Catcher від Michal Skogemann - це інструмент для локальної розробки, що перехоплює вихідні SMS-повідомлення. Подібно до Mailpit для email, він надає візуальну панель для перегляду тексту та метаданих SMS під час локальної роботи.

3
Laravel Time Machine
Новини 22 липня 2026

Laravel Time Machine: профайлер життєвого циклу запитів

Laravel Time Machine - новий пакет для профілювання продуктивності, що записує кожен етап обробки Laravel-запиту з точністю до мілісекунди. Надає візуальну хронологію від завантаження фреймворку до завершення, зберігає SQL-запити та виділяє повільні операції без використання бази даних.

1
Tips 21 липня 2026

Accessors & Mutators - автоматична обробка даних

Форматуєте дати у кожному контролері? Перетворюєте імена?

Accessors і Mutators роблять це в моделі.

Accessors - трансформація при читанні Mutators - трансформація при записі

Laravel 9+ синтаксис:

Через клас Attribute.

Переваги:

  • Логіка в одному місці
  • Єдиний формат даних
  • Модель сама відповідає за трансформації

Порада: Ідеально для паролів, форматування дат і тексту.

5
use Illuminate\Database\Eloquent\Casts\Attribute;

class User extends Model
{
  // Accessor
  protected function name(): Attribute
  {
    return Attribute::make(
      get: fn($value) => ucfirst($value),
    );
  }

  // Mutator
  protected function password(): Attribute
  {
    return Attribute::make(
      set: fn($value) => bcrypt($value),
    );
  }

  // Обидва
  protected function firstName(): Attribute
  {
    return Attribute::make(
      get: fn($value) => ucfirst($value),
      set: fn($value) => strtolower($value),
    );
  }
}
SimpleStats
Новини 21 липня 2026

Об'єднана аналітична система для Laravel: трафік, дохід та атрибуція в одному місці

Більшість Laravel SaaS використовують три окремі інструменти для аналітики: трафік, доходи та атрибуцію реклами. SimpleStats пропонує об'єднати їх у єдину серверну систему, яка відстежує весь шлях клієнта від першого візиту до оплати в одному місці.

Найдешевший запит - той, якого немає: eager loading і лічильники Рекомендовано
Посібники 20 липня 2026
Як будувався laravelukraine.com

Найдешевший запит - той, якого немає: eager loading і лічильники

Найдешевший запит - той, якого немає. З цього починаємо серію про продуктивність laravelukraine.com. Eager loading проти N+1 у зв'язках - зокрема підступний випадок аватарів через Spatie MediaLibrary, де забутий author.media повертає прихований запит на кожен рядок. Плюс withCount/loadCount замість ручних COUNT і чому іноді найправильніше рішення - взагалі не кешувати.

Tips 20 липня 2026

when() - умовні фільтри без if/else

Створюєте фільтр пошуку з купою умов if? Це важко читати.

when() додає умову до запиту тільки тоді, коли вона потрібна.

Переваги:

  • Ланцюжок не переривається
  • Код виглядає чистіше
  • Легко читати
  • Без зайвих тимчасових змінних

Просунутий варіант:

Є callback для "else".

Порада: Ідеально для API-фільтрів, де параметри опціональні.

10
// ПОГАНО
$query = User::query();
if ($request->status) {
  $query->where('status', $request->status);
}
if ($request->role) {
  $query->where('role', $request->role);
}
$users = $query->get();

// ДОБРЕ
$users = User::query()
  ->when($request->status,
    fn($q, $v) => $q->where('status', $v))
  ->when($request->role,
    fn($q, $v) => $q->where('role', $v))
  ->get();

// З "else"
$users = User::when(
  $request->sort === 'name',
  fn($q) => $q->orderBy('name'),
  fn($q) => $q->orderBy('created_at')
)->get();

Матеріали за темою «Laravel»: усе, що ми писали про це українською. Нижче - суміжні теми, якщо шукаєте ширше.

Зараз опубліковано 150 матеріалів від 3 авторів. Останній матеріал - 12 вересня 2026.