Как сделать переменную пустой, если она не найдет элемент?

У меня есть уроки и есть тест для урока. Я ищу конкретный тест, который существует для некоторых уроков и не существует для некоторых уроков.

  • Мой вопрос: как сделать переменную test пустым массивом, если он не найдет данные?
$test = Test::where('level', 'medium')->where('lesson_id', $lesson->id)->firstOrFail();

Я имею в виду, что если код выше элемента не существует, как я собираюсь назначить его как пустой массив, я получаю сообщение об ошибке, потому что в некоторых случаях он не находит данные, я пытался поместить код внутри try and catch, но мне это не помогло !

Ни firstOrFail(), ни first() не вернут массив. Это действительно то, чего вы хотите?

Clément Baconnier 01.05.2019 19:22

Можете ли вы показать, как вы используете/тестируете данные, то есть где вы проверяете, пусты ли они?

Rwd 01.05.2019 19:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
2
47
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

firstOrFail должен генерировать исключение, поэтому в try catch вы сможете его разрешить, другой подход заключается в следующем:

$test = Test::where('level', 'medium')->where('lesson_id', $lesson->id)->first() ?? [];

оператор ?? означает, что если результатом первой части является null, он вернет пустой массив.

Чтобы получить данные из базы данных или пустого массива (коллекции), если нет соответствующих данных, вы можете использовать функцию get() в построителе запросов.

$test = Test::where('level', 'medium')
            ->where('lesson_id', $lesson->id)
            ->get();

firstOrFail() функция возвращает первый найденный элемент, но если элемент не существует, выдается исключение ModelNotFoundException. Я не знаю, почему вы хотите разместить здесь пустой массив, но это решение для вашего случая:

$test = Test::where('level', 'medium')
    ->where('lesson_id', $lesson->id)
    ->first(); // this returns null if item doesn't exist
$test = $test ?? []; // this turns null to empty array

Лучшее решение состоит в том, чтобы взять null из результата запроса и проверить его, если. Пример:

$test = Test::where('level', 'medium')
    ->where('lesson_id', $lesson->id)
    ->first();

if (!$test) {
    // do this, if item doesn't exist
}

или вот так:

try {
    $test = Test::where('level', 'medium')
        ->where('lesson_id', $lesson->id)
        ->firstOrFail();
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $exception) {
    // do this, if item doesn't exist
}

вы можете использовать exists() или dontExist(), чтобы проверить, существуют ли записи или нет.

$test = Test::where('level', 'medium')->where('lesson_id', $lesson->id)->exists();

Другие вопросы по теме