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

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

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

No results.
Laravel 13.26
Новини 20 серпня 2026

Файлові системи з автопросуванням та відкладені слухачі у Laravel 13.26

Laravel 13.26 додає драйвер файлової системи read-through, що поєднує основний диск із резервним і просуває файли при першому читанні, підтримку debouncing для слухачів подій у черзі, метод Queue::forward() для перенаправлення черг та покращення роботи з процесами.

8
Laravel Lock
Переклади 18 серпня 2026

Laravel Lock: пакет для розподілених блокувань моделей та маршрутів

Laravel Lock від Md Mahedi Zaman Zaber - це пакет для керування розподіленими блокуваннями у Laravel. Він пропонує зручний інтерфейс для блокування моделей та маршрутів, підтримку двох драйверів зберігання (кеш і база даних), middleware для захисту роутів та автоматичне звільнення ресурсів навіть при помилках.

25
Tips 12 серпня 2026

withDefault() - ніяких null при зв'язках

Постійно перевіряєте, чи існує зв'язок, перед доступом до нього?

withDefault() повертає "порожню" модель замість null.

Переваги:

  • Менше if ($user->profile)
  • Чистіші Blade-шаблони
  • Можливість задати дефолтні значення
// User model
public function profile()
{
  return $this->hasOne(Profile::class)
    ->withDefault([
      'bio' => 'No bio provided',
      'avatar' => 'default.png',
      'website' => null,
    ]);
}

// Без перевірок на null
{{ $user->profile->bio }}
// Динамічні дефолти
public function profile()
{
  return $this->hasOne(Profile::class)
    ->withDefault(function ($profile, $user) {
      $profile->bio = "Member since {$user->created_at->year}";
    });
}

// BelongsTo з дефолтом
public function author()
{
  return $this->belongsTo(User::class, 'author_id')
    ->withDefault([
      'name' => 'Guest',
      'email' => 'noreply@example.com',
    ]);
}

// У Blade
{{ $post->author->name }} // Ніколи не null
Laravel Discount
Новини 12 серпня 2026

Laravel Discount: знижки, промокоди, ліміти використання та стекування

Пакет Laravel Discount від Milwad Khosravi надає повноцінну систему знижок для Laravel-додатків: відсоткові та фіксовані знижки, промокоди, часові вікна, ліміти використання, підтримку гостей, стекування знижок та інтеграцію з кошиком.

16
Tips 10 серпня 2026

whereBetween() - запити по діапазонах

Фільтруєте по діапазону через дві where-умови? Читається важко.

whereBetween() робить те саме, але чистіше.

Кейси:

  • Діапазони дат
  • Фільтр по ціні
  • Вік
  • Будь-які числові інтервали

Є протилежність - whereNotBetween().

// ПОГАНО
$orders = Order::where('total', '>=', 100)
  ->where('total', '<=', 500)
  ->get();

// ДОБРЕ
$orders = Order::whereBetween('total', [100, 500])->get();

// Діапазон дат
$orders = Order::whereBetween('created_at', [
  now()->subDays(30),
  now()
])->get();

// Вік
$users = User::whereBetween('age', [18, 65])->get();

// Виключити діапазон
$products = Product::whereNotBetween('price', [100, 200])->get();
Tips 07 серпня 2026

upsert() - масовий insert/update

Треба масово вставити або оновити дані?

upsert() робить insert або update у межах одного запиту.

Як працює:

  • Вказуєте унікальні колонки для пошуку
  • Якщо запис існує - оновлюється
  • Якщо ні - вставляється

Порада: ідеально для синхронізації з зовнішніми сервісами.

// Масове оновлення/створення користувачів
User::upsert(
  [
    ['email' => 'john@ex.com', 'name' => 'John', 'age' => 30],
    ['email' => 'jane@ex.com', 'name' => 'Jane', 'age' => 25],
    ['email' => 'bob@ex.com', 'name' => 'Bob', 'age' => 35],
  ],
  ['email'], // Унікальне поле
  ['name', 'age'] // Поля для оновлення
);
Tips 06 серпня 2026

existsOr() та doesntExistOr() - чисті перевірки існування

Спочатку перевіряєте exists(), потім робите дію? Виходить громіздкий if/else.

existsOr() виконає callback, якщо запис не існує. doesntExistOr() - якщо існує.

Де корисно:

  • Кинути виняток
  • Створити запис
  • Залогувати подію
  • Надіслати нотифікацію
// ПОГАНО
if (!User::where('email', $email)->exists()) {
  return response()->json(['error' => 'User not found'], 404);
}

// ДОБРЕ
User::where('email', $email)
  ->existsOr(function () {
    throw new UserNotFoundException('User not found');
  });

// Створити, якщо немає
Post::where('slug', $slug)
  ->existsOr(function () use ($slug) {
    Post::create(['slug' => $slug, 'title' => 'Draft']);
  });

// Лог при існуванні
Order::where('id', $orderId)
  ->where('status', 'pending')
  ->doesntExistOr(function () use ($orderId) {
    Log::warning("Non-pending order: {$orderId}");
  });
Laravel 13.24
Новини 06 серпня 2026

Визначення домінантного кольору та підтримка HEIC у Laravel 13.24

Laravel 13.24 розширює Image API визначенням домінантного кольору та підтримкою HEIC, додає метод modelKeys() до Eloquent query builder, впроваджує правило валідації array_keys та виправляє критичне уповільнення валідації великих масивів з wildcards.

4
Tips 05 серпня 2026

Умовне завантаження зв'язків

Потрібні різні зв'язки в залежності від контексту?

Використовуйте when() для умовного eager loading.

Типові кейси:

  • Admin vs звичайний користувач
  • API vs web
  • Різні рівні деталізації

Перевага: одна логіка запиту, різні варіанти відповіді.

// За роллю
$posts = Post::query()
  ->when(auth()->user()->isAdmin(), function ($query) {
    $query->with(['author', 'drafts', 'revisions']);
  })
  ->when(!auth()->user()->isAdmin(), function ($query) {
    $query->with('author:id,name');
  })
  ->get();

// За параметрами запиту
$posts = Post::query()
  ->when(request()->has('include_author'),
    fn($q) => $q->with('author')
  )
  ->when(request()->has('include_comments'),
    fn($q) => $q->with('comments.user')
  )
  ->get();

Перевір себе

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

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

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