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