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

Статті за тегом «Зв'язки»

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

No results.
Tips 12 серпня 2026

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

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

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

Переваги:

  • Менше if ($user->profile)
  • Чистіші Blade-шаблони
  • Можливість задати дефолтні значення
4
// 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
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();
Tips 28 липня 2026

whereHas() проти has() - фільтр за зв'язками

Треба знайти користувачів, у яких є пости? Або тільки з опублікованими постами?

has() перевіряє факт наявності зв'язку. whereHas() дозволяє додати умови до зв'язку.

Різниця:

  • has('posts') - користувачі з будь-якими постами
  • whereHas('posts', fn($q) => ...) - користувачі з конкретними постами

Порада по продуктивності:

Використовуйте has(), коли немає додаткових умов - він простіший.

6
// Користувачі з будь-якими постами
$users = User::has('posts')->get();

// Користувачі з мінімум 5 постами
$users = User::has('posts', '>=', 5)->get();

// Користувачі тільки з опублікованими постами
$users = User::whereHas('posts', function ($query) {
  $query->where('published', true);
})->get();

// Більш складні умови
$users = User::whereHas('posts', function ($query) {
  $query->where('published', true)
    ->where('views', '>', 1000);
})->get();

// Користувачі без постів
$users = User::doesntHave('posts')->get();

// Комбінування кількох зв'язків
$users = User::has('posts')
  ->whereHas('comments', fn($q) => $q->where('spam', false))
  ->get();

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

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