Как избежать ошибки при использовании toArray Eloquent при получении нулевого результата - PullRequest
0 голосов
/ 05 января 2019

Я начинаю новый проект laravel с 5.7, но есть одна проблема: когда я использую first() для извлечения данных, и если данные не существуют, он вернет null, а затем выполнит toArray(). киньте ошибку PHP. Поэтому я использую следующий код, чтобы восстановить его.

$user_model = \App\Model\User::where('id', $id);

if ($select) {
    $user_model->select(explode(',', $select));
}

$user_data = $user_model->first();
$user_data = $user_data ?? $user_data->toArray();

Так есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Будет работать любое из следующих действий, каждое из которых по-своему будет иметь дело с нулевым результатом:

1. опционально помощник:

Необязательная функция принимает любой аргумент и позволяет вам получить доступ свойства или вызов метода для этого объекта. Если данный объект является нулевым, свойства и методы будут возвращать ноль вместо того, чтобы вызывать ошибку.

$user_data = optional($user_model->first())->toArray();

2. firstOr ()

Выполнить запрос и получить первый результат или вызвать обратный вызов.

$data = User::where('id', $id)->when(!is_null($select), function ($query) use ($select) {
    return $query->select(explode(',', $select));
})->firstOr(function () {
    return ['message' => 'No results'];
});

3. спасение помощник:

Функция спасения выполняет заданное Закрытие и перехватывает любые исключения, возникающие во время его выполнения. Все обнаруженные исключения будут отправлены в метод отчета вашего обработчика исключений; однако запрос продолжит обработку.

$data = rescue(function () use ($select) {
    \App\Model\User::where('id', $id);

    if ($select) {
        $user_model->select(explode(',', $select));
    }

    return $user_model->first()->toArray();
});

4. попробуйте поймать:

try {
    $user_model = \App\Model\User::where('id', $id);

    if ($select) {
        $user_model->select(explode(',', $select));
    }

    $user_data = $user_model->first();
    $user_data = $user_data ?? $user_data->toArray();
} catch(\Exception $e) {
    // handle the exception...
}
0 голосов
/ 05 января 2019

Laravel предоставляет метод firstOrFail, который выбрасывает исключение 404 по умолчанию.

    $user_data = $user_model->firstOrFail(); // If not found an exception is thrown and will be handled by default ExceptionHandler which displays a 404 error page. 
    // if found, cast the User to array
    $user_data = $user_data->toArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...