Новый метод 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 )
Максим Гречушников/ автор статьи
Мне 40 лет, и больше половины жизни я занимаюсь разработкой. За это время я работал с корпоративными системами, highload-проектами, интеграциями, платежными решениями, внутренними платформами и legacy-кодом, который пережил не одного разработчика. Некоторые системы, кажется, переживут и нас. Моя специализация — PHP, Laravel, backend-архитектура, DDD, тестирование, рефакторинг и техническое лидерство. Мне интересны задачи, где нужно соединить код, бизнес, данные, процессы и здравый смысл. Последние годы я много работаю с LLM и AI-инструментами: использую их для проектирования, анализа кода, документации, тестов, ревью, работы с legacy и построения инженерных процессов. Для меня LLM — это не замена разработчику, а усилитель для тех, кто умеет думать системно. В блоге я пишу о Laravel, PHP, архитектуре, тестировании, инженерной практике, управлении разработкой и реальном применении AI в работе программиста.
Понравилась статья? Поделиться с друзьями: