---
title: "Subquery Selects - уникаємо N+1 без eager loading"
url: https://laravelukraine.com/blog/subquery-selects-unikajemo-n1-bez-eager-loading
date: 2026-07-29
---

# Subquery Selects - уникаємо N+1 без eager loading

Потрібен останній пост користувача? Eager loading витягне ВСІ пости.

Subquery-select дозволяє додати обчислювану колонку без завантаження зв'язку.

**Коли використовувати:**

* Останній/перший пов'язаний запис
* count/sum/max/min по зв'язку
* Коли не потрібні повні дані зв'язку

**Продуктивність:**

Один запит. Ніякого N+1. Немає зайвих даних.

```php
// ПОГАНО: вантажимо всі пости, щоб узяти останній
$users = User::with('posts')->get();
foreach ($users as $user) {
  echo $user->posts
    ->sortByDesc('created_at')->first()->title;
}

// ДОБРЕ: subquery - тільки заголовок останнього поста
$users = User::select('users.*')
  ->addSelect(['last_post_title' => Post::select('title')
    ->whereColumn('user_id', 'users.id')
    ->latest()
    ->limit(1)
  ])->get();

echo $users[0]->last_post_title;

// Сортування по subquery - без завантаження постів
$users = User::orderByDesc(
  Post::select('created_at')
    ->whereColumn('user_id', 'users.id')
    ->latest()
    ->limit(1)
)->get();
```
