如何在不分别检查每种方法的情况下检查整个关系链?

时间:2016-10-20 08:15:07

标签: php laravel

我经常得到一个说Call to a member function method() on null的FatalErrorException。这种情况发生在我使用(刀片式)长链式句子时,其中一个(模型)为空。例如:

$file->owners()->first()->categories()->first()->title

所以当例如这里的类别返回null时,我得到这个例外。我必须逐个检查每种方法。我无法在以下时间检查它们:

!empty($file->owners()->first()->categories()->first()->title)
!is_null($file->owners()->first()->categories()->first()->title)
isset($file->owners()->first()->categories()->first()->title)
count($file->owners()->first()->categories()->first()->title)

我仍然通过使用这些来获得异常,因为(我猜)在获得最终参数之前(此处为'标题'),该过程将通过所有方法进行,然后才能进入最后一个异常来了。实际上在控制器中这可能是所有这些检查的指导,但在刀片中,这对我来说并不那么重要。此外,这是一个循环。所以我想看看我怎么能立刻做这个检查。

2 个答案:

答案 0 :(得分:1)

如果从第一个first()调用中获取null,则无法继续方法链接。您始终可以使用try ... catch

try {
    $file->owners()->first()->categories()->first()->title
} catch (\Exception $e) {
    // do on fail
}

答案 1 :(得分:1)

我建议您在项目中使用View Presenter。通过从视图中移除所有额外的逻辑并将其放在专用的演示者类中,它确实可以帮助您保持代码清洁。

观看此laracasts视频了解详情。