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

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

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

No results.
Tips 24 липня 2026

whereBelongsTo() - чисті запити по зв'язках

Фільтруєте за зв'язком через where('user_id', $user->id)? Можна краще.

whereBelongsTo() сам підставляє зовнішній ключ.

Переваги:

  • Не треба пам'ятати назву foreign key
  • Працює з кастомним ключем
  • Краще читається
  • Безпечніше при рефакторингу

Бонус: працює з масивом моделей.

Порада: дуже зручно в policy-методах, де фільтруєте по auth()->user().

// ПОГАНО: ручний foreign key
$posts = Post::where('user_id', $user->id)->get();
$comments = Comment::where('post_id', $post->id)->get();

// ДОБРЕ: Laravel сам визначає ключ
$posts = Post::whereBelongsTo($user)->get();
$comments = Comment::whereBelongsTo($post)->get();

// Кілька зв'язків
$comments = Comment::whereBelongsTo($user)
  ->whereBelongsTo($post)
  ->get();

// Кастомна назва зв'язку
$posts = Post::whereBelongsTo($user, 'author')->get();

// У policy - максимально чисто
public function update(User $user, Post $post)
{
  return Post::whereBelongsTo($user)->exists();
}
Founders Summit
Новини 24 липня 2026

Laravel оголошує Founders Summit - одноденний захід для засновників

Laravel відкрив прийом заявок на Founders Summit - камерну зустріч для засновників та керівників компаній, що побудовані на Laravel. Захід відбудеться в листопаді 2026 року, а його формат орієнтований на практичний обмін досвідом, а не на доповіді.

Tips 23 липня 2026

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

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

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

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

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

Два підходи:

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

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

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 для чутливих даних (напр. номери карток).

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 під час локальної роботи.

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

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

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

Tips 21 липня 2026

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

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

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

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

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

Через клас Attribute.

Переваги:

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

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

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),
    );
  }
}