---
title: "sole() - суворе отримання одного результату"
url: https://laravelukraine.com/blog/sole-suvore-otrimannia-odnogo-rezultatu
author: "Олексій Бабінцев"
date: 2026-04-10
---

# sole() - суворе отримання одного результату

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

`first()` мовчки повертає null. `sole()` кидає виняток якщо не рівно один.

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

- Отримання за унікальним ідентифікатором
- Коли декілька результатів вказують на пошкодження даних
- Критична бізнес-логіка

**Винятки що кидаються:**

- `RecordsNotFoundException` - нуль результатів
- `MultipleRecordsFoundException` - більше одного

Порада: Використовувати у фінансових операціях де очікується рівно один запис.

```php
// ПОГАНО: Мовчки повертає null або перший з багатьох
$user = User::where('email', $email)->first();
// Що якщо є дублікати? Мовчазний баг.

// ДОБРЕ: Гарантує рівно один результат
try {
    $user = User::where('email', $email)->sole();
    // Гарантовано єдиний користувач що підходить
} catch (RecordsNotFoundException $e) {
    // Користувач не знайдений
} catch (MultipleRecordsFoundException $e) {
    // Пошкодження даних - існують дублікати
}

// В обробці рахунків
$invoice = Invoice::where('invoice_number', $number)->sole();
// Дублікати були б серйозним багом

// firstOr vs soleOr
$user = User::where('email', $email)->soleOr(function () {
    throw new UserNotFoundException();
});

// Зі зв'язками
$user = User::with('profile')->where('id', $id)->sole();
```
