Новый метод sole() в laravel 8.x

С последним выпуском minor Laravel, то есть v8.23.0, в построителе запросов Laravel был введен действительно интересный метод для ситуации, когда вы хотите получить единственную запись для соответствующих критериев. Но если есть больше записей для этого критерия, должно быть какое-то исключение.

Давайте разберемся в этом подробнее.

sole()было предложено в этом PR Мохаммедом Саидом. Такой метод есть в Django get() и Rails sole и find_sole_by.

Вот как работает этот метод.

try {
    $order = Order::where('invoice_number', '#INV12345')->sole();
} catch (Illuminate\Database\Eloquent\ModelNotFoundException $e) {
    // order not found
} catch (Illuminate\Database\Eloquent\MultipleRecordsFoundException $e) {
    // multiple records found
}

Как вы можете заметить, метод sole()вернет только ту запись, которая соответствует критериям, если не будет найдено ни одной записи то выбросится NoRecordsFoundException, а если будет найдено несколько записей, то MultipleRecordsFoundException.

Этот метод может оказаться полезным, когда вам нужна одна строка, но также вы хотите утверждать, что нет нескольких строк, соответствующих условию; особенно когда ограничений базы данных недостаточно (например, уникальных индексов в MySQL) или они непрактичны.

оригинал

Рейтинг
( 2 оценки, среднее 5 из 5 )
Maxyc Webber/ автор статьи
Мне 35 лет. Опыт профессиональной разработки 15 лет. Занимаюсь разработкой и поддержкой корпоративных систем автоматизации бизнеса, а также высоконагруженными проектами. Мне нравится решать нестандартные проблемы бизнеса. Имею опыт формирования команд под проект, налаживания процесса разработки, коммуникации программистов и заказчиков. Есть опыт работы с зарубежными заказчиками (ОАЭ, Польша, Германия, Швейцария).
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.