【问题标题】:How to get rid of "Trying to get property of non-object" errors for good?如何永远摆脱“试图获取非对象的属性”错误?
【发布时间】:2014-05-26 07:40:22
【问题描述】:

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

{{ $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”?这样做会很愚蠢吗?

【问题讨论】:

  • 还有其他的解决方案,我之前什至用代码把它排好。但是 IIRC 只有在刀片实际上将变量表达式放入我不知道的字符串上下文时才有效,因为我不使用 Laravel。

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


【解决方案1】:

你可以试试这样的:

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

您也可以使用以下方式仅获取具有相关模型的模型:

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

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

检查Querying Relations

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2016-06-13
    • 2018-06-02
    • 2017-08-20
    相关资源
    最近更新 更多