如何摆脱"试图获得非对象的属性"错误好吗?

时间:2014-05-25 21:09:31

标签: php laravel error-handling laravel-4 runtime-error

在我的代码的各个部分中,我试图回应或以其他方式使用相关模型中的数据,例如

{{ $jobApplication->job->title }}

到目前为止,我总是使用刀片条件来仅在存在时回显数据:

@if (! empty ($jobApplication->job))
{{ $jobApplication->job->title }}
@endif

......这很痛苦。

在相关问题(Laravel 4: fetching only models that have related models)中,据说没有解决方法。

似乎我不是唯一想知道(PHP - How to catch a 'Trying to get property of non-object' error)是否可以捕获此异常的人。然而,正如公认的答案所指出的那样,“试图获得非对象的属性”不是例外,而是一个错误。

这是否真的是添加几乎无穷无尽的 if 子句以检查相关模型是否存在的唯一解决方案?

我的意思是,如果通常会返回错误,那么让Laravel返回“null”会怎样? Woudl这是一件非常愚蠢的事情吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

{{ isset($jobApplication->job) ? $jobApplication->job->title : ''  }}

此外,您可能只使用以下内容获取具有相关模型的模型:

$jobApplication = JobApplication::has('job')->with('job')->get();

现在$jobApplication包含具有相关Job模型的模型,但仅包含与JobApplication模型相关的Job模型。

检查Querying Relations