РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
216 of 1392 menu

Метод sole

Метод sole применяется к запросу Eloquent или Query Builder и возвращает единственную модель или объект, удовлетворяющий условиям выборки. Если запрос не возвращает ни одной записи, метод выбрасывает исключение Illuminate\Database\Eloquent\ModelNotFoundException (или Illuminate\Database\RecordsNotFoundException для Query Builder). Если запрос возвращает более одной записи, выбрасывается исключение Illuminate\Database\MultipleRecordsFoundException. Метод полезен в ситуациях, когда по логике приложения должен существовать ровно один результат.

Синтаксис

<?php Model::where($column, $operator, $value)->sole(); ?>

Пример

Давайте найдём пользователя с уникальным email-адресом:

<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Database\MultipleRecordsFoundException; use Illuminate\Database\Eloquent\ModelNotFoundException; class UserController extends Controller { public function show() { try { $user = User::where('email', 'user@example.com')->sole(); echo $user->name; } catch (ModelNotFoundException $e) { echo "User not found"; } catch (MultipleRecordsFoundException $e) { echo "Multiple users found"; } } } ?>

Результат выполнения кода:

"John Doe"

Пример

Давайте попробуем найти пользователя по ID, который должен быть уникальным:

<?php namespace App\Http\Controllers; use App\Models\User; class UserController extends Controller { public function show() { $user = User::where('id', 1)->sole(); echo $user->name; } } ?>

Результат выполнения кода:

"Jane Smith"

Пример

Если запрос возвращает более одной записи, метод sole выбрасывает исключение:

<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Database\MultipleRecordsFoundException; class UserController extends Controller { public function show() { try { $user = User::where('status', 'active')->sole(); echo $user->name; } catch (MultipleRecordsFoundException $e) { echo "Expected only one user, but found multiple"; } } } ?>

Результат выполнения кода:

"Expected only one user, but found multiple"

Пример

Если запрос не возвращает ни одной записи, также выбрасывается исключение:

<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Database\Eloquent\ModelNotFoundException; class UserController extends Controller { public function show() { try { $user = User::where('id', 999)->sole(); echo $user->name; } catch (ModelNotFoundException $e) { echo "User with ID 999 not found"; } } } ?>

Результат выполнения кода:

"User with ID 999 not found"

Пример

Метод sole можно использовать с Query Builder для работы с таблицами напрямую:

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use Illuminate\Database\RecordsNotFoundException; use Illuminate\Database\MultipleRecordsFoundException; class UserController extends Controller { public function show() { try { $user = DB::table('users') ->where('email', 'admin@example.com') ->sole(); echo $user->name; } catch (RecordsNotFoundException $e) { echo "User not found"; } catch (MultipleRecordsFoundException $e) { echo "Multiple users found"; } } } ?>

Результат выполнения кода:

"Admin"

Смотрите также

  • метод first,
    который возвращает первую запись из результата запроса
  • метод firstOrFail,
    который возвращает первую запись или выбрасывает исключение
  • метод find,
    который находит запись по первичному ключу
  • метод get,
    который выполняет запрос и возвращает коллекцию всех записей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить