Как решить "Попытка получить свойство необъекта" в Laravel?

Если мой код возвращает ноль, то он генерирует эту ошибку. Если код возвращает некоторые данные, то он работает нормально.

контроллер

$profile_data= DB::table('partner_prefence')
    ->select('*')
    ->where('profile_id',$profile_id)
    ->first();

return view('partner_prefence',['profile_data' =>  $profile_data]);

Вид (Blade-синтаксис)

@php($rel_status = explode(',', $profile_data->p_marital_status))

Если $profile->p_marital_status имеет какое-то значение, то не проблема. ошибка приходит только тогда, когда ее значение равно нулю.

3 ответа

Использовать optional()https://laravel.com/docs/5.8/helpers

Если данный объект имеет значение null, свойства и методы будут возвращать значение null вместо того, чтобы вызывать ошибку.

{!! old('name', optional($user)->name) !!}

В зависимости от того, является ли запись жизненно важной для отображаемой страницы или нет, вы можете выполнить проверку в контроллере.

$profile_data = DB::table('partner_prefence')
->select('*')
->where('profile_id',$profile_id)
->firstOrFail()

Или разрешить передачу нулевого значения в представление и выполнить троичную проверку.

$profile_data ? $profile_data->p_marital_status : '';

Рекомендации:

Троичный оператор

Получение одиночных моделей

Сначала нужно проверить $profile_data, является ли он пустым или содержит какие-то данные. Шаг 2: Проверка объекта $profile_data имеет свойство p_material_status. Шаг 3. Если оба вышеприведенных значения верны, попробуйте разбить данные, в противном случае верните сообщение об ошибке и постарайтесь не разбивать данные, что будет лучше.

<?php

$data = (($profile_data != null) && property_exists($profile_data->p_marital_status)) ? $profile_data->p_marital_status : null)
if($data){
$rel_status = explode(',', $data);
}else{
    // Something else
}

?>

Просто используйте isset() или же != null на предложение, как это:

@php($rel_status = $profile_data ? explode(',', $profile_data->p_marital_status?: '')) : [];
Другие вопросы по тегам