Как решить "Попытка получить свойство необъекта" в 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?: '')) : [];