Laravel 的 optional 辅助函数

JellyBool

JellyBool

在 Laravel 新版本当中,有一个非常有用的辅助方法:optional()

这个方法的应用场景是什么呢?其实如果你多写代码的话,经常会遇到类似下面的报错信息:


Call to a member function on null object...

这其实是在我们的代码中存在着某个对象为空,所以在我们调用方法或者获取属性的时候就会报出以上错误信息。比如我们举个例子:

User 的体系中,我们也有 Profile 的 Model 文件,而一个 User 拥有一个 ProfileProfile 中包含用户的地址信息)

public function profile(){
   return $this->hasOne(Profile::class);
}

然后在我们 User 的信息页面,我们希望通过下面的代码获取 User 的地址:

$user->profile->address;

如果在数据库中,我们没有该 User 对应的 Profile,这个时候就会出现文章开始说到的类似错误了。

所以,这个时候,optional() 就可以派上用场了

我们只需要这样获取用户的地址信息就好:

optional($user->profile)->address

这个时候,即使 profile 为空值(null),这一行代码也不会报错,而是会显示一个空的字符串出来。
是不是非常有用!有了 optional() 这个辅助函数之后,在很多类似的代码中,在你不确定是否该对象会为 null 的时候,就可以加上 optional() 来做保险了!

本文由 JellyBool 创作, 转载和引用遵循 署名-非商业性使用 2.5 中国大陆 进行许可。

共有 6 条评论

bourne

省很多没用的判定呢

JellyBool 回复 bourne

对的啊,就是这个用处

Hyttt456

JellyBool这篇博客允许我转载么 …我想转载到我的公司BLOG上面

JellyBool 回复 Hyttt456

转呗,说明来源就行

haohexin

optional$user->profile)->address
老大 这是写错了吗

JellyBool 回复 haohexin

确实是, 我修改一下

uighurbabbage

一百个赞666

49gd

这个很棒 省下不少判断的功夫

xhh1100
$returnData = [];
        foreach(optional($projects) as $value) {
            $returnData[] = $value;
        }
        dd($returnData);

这个在projects有值时,返回的数据为returnData 为 空数组