如何在Laravel中解决“试图获取非对象的属性”?

时间:2018-10-05 15:25:48

标签: laravel laravel-5 laravel-blade laravel-helper

如果我的代码返回null,则它将生成此错误。如果代码返回了一些数据,则可以正常工作。

控制器

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

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

查看/刀片

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

如果$profile->p_marital_status有一个值,那么就没有问题。该错误仅在其值为null时出现。

4 个答案:

答案 0 :(得分:1)

首先需要检查$ 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
}

?>

答案 1 :(得分:1)

根据条目是否对呈现页面至关重要,可以在控制器中执行检查。

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

或者允许将null值传递给视图并进行三元检查。

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

参考文献:

Ternary Operator

Retrieving Single Models

答案 2 :(得分:0)

在这样的句子上简单地使用isset()!= null

@php($rel_status = $profile_data ? explode(',', $profile_data->p_marital_status?: '')) : [];

答案 3 :(得分:0)

使用optional() https://laravel.com/docs/5.8/helpers#method-optional

如果给定的对象为null,则属性和方法将返回null而不引起错误。

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