Как сделать переменную пустой, если она не найдет элемент? - PullRequest
0 голосов
/ 01 мая 2019

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

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

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

Ответы [ 4 ]

3 голосов
/ 01 мая 2019

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

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

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

1 голос
/ 01 мая 2019

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
}
0 голосов
/ 01 мая 2019

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

$test = Test::where('level', 'medium')->where('lesson_id', $lesson->id)->exists();
0 голосов
/ 01 мая 2019

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

$test = Test::where('level', 'medium')
            ->where('lesson_id', $lesson->id)
            ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...