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

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

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

No results.
Laravel 13.21
Новини 23 липня 2026

Laravel 13.21: атрибут RouteKey для моделей, валідація base64 та розширення можливостей Image

У Laravel 13.21 з'явився атрибут #[RouteKey] для налаштування route model binding, правило валідації base64, атрибут #[RequestAttribute] для впровадження атрибутів запиту, а також підтримка форматів PNG, GIF, AVIF і BMP у компоненті Image.

2
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
}
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),
    );
  }
}
Найдешевший запит - той, якого немає: 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-фільтрів, де параметри опціональні.

// ПОГАНО
$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();
Tips 17 липня 2026

Soft Deletes - ніколи не втрачайте дані

Користувач випадково видалив свій акаунт. Відновити не можна. Негатив забезпечено.

Soft Deletes позначають запис як видалений, але фактично не прибирають його з бази.

Як працює:

Додаємо поле deleted_at, а Laravel автоматично приховує такі записи.

Корисні методи:

  • forceDelete() - повне видалення
  • withTrashed() - включити видалені
  • onlyTrashed() - лише видалені
  • restore() - відновити

Порада: Сумісно з GDPR: можна відновити за 30 днів, а потім зробити force delete.

// Міграція
Schema::table('users', function (Blueprint $table) {
  $table->softDeletes();
});

// Модель
use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
  use SoftDeletes;
}

// Використання
$user->delete(); // Soft delete
$user->forceDelete(); // Повне видалення

// Запити
User::all(); // Тільки активні
User::withTrashed()->get(); // Включно з видаленими
User::onlyTrashed()->get(); // Лише видалені

// Відновлення
$user = User::withTrashed()->find(1);
$user->restore();

// Перевірка
if ($user->trashed()) {
  // Користувач видалений
}
Laravel Cooldown
Новини 17 липня 2026

Laravel Cooldown: пакет для контролю часових інтервалів між діями

Laravel Cooldown - новий пакет від Mahedi Zaman Zaber, який дозволяє встановлювати часові блокування на конкретні дії: обмеження повторної відправки OTP, інтервали між запитами на скидання пароля, затримки перед повторними спробами платежів та інші сценарії з очікуванням.

Tips 16 липня 2026

updateOrCreate() - простий спосіб upsert

Перевіряєте, чи існує запис, а потім оновлюєте або створюєте? Забагато коду.

updateOrCreate() виконує обидві операції за один раз.

Як працює:

  • Перший аргумент - умови пошуку
  • Другий - дані для оновлення/створення

Магія:

  • Якщо запис знайдено - оновлює
  • Якщо ні - створює

Порада: Ідеально підходить для інтеграцій з API.

// ПОГАНО: два запити, зайвий код
$user = User::where('email', 'john@example.com')->first();
if ($user) {
  $user->update(['name' => 'John Doe']);
} else {
  User::create([
    'email' => 'john@example.com',
    'name' => 'John Doe'
  ]);
}

// ДОБРЕ: один метод, один запит
User::updateOrCreate(
  ['email' => 'john@example.com'],
  ['name' => 'John Doe', 'verified' => true]
);

// Синхронізація даних з API
$apiUsers = ExternalAPI::getUsers();
foreach ($apiUsers as $apiUser) {
  User::updateOrCreate(
    ['external_id' => $apiUser['id']],
    ['name' => $apiUser['name'], 'email' => $apiUser['email']]
  );
}
Laravel 13.20
Новини 16 липня 2026

Laravel 13.20 отримав власну обробку зображень

Вийшов Laravel 13.20, який додає вбудовану обробку зображень через новий Image-фасад, атрибут WithoutMiddleware для контролерів, окремий префікс сесій у Redis, тихе збільшення/зменшення в Eloquent та підтримку enum у WithoutOverlapping.

15

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

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

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