如果说是php让做网站变得更简单,那laravel则是让php变得更优雅。有没有被empty(), isset(), is_null(), is_numeric()这些函数嵌套整晕过,然而laravel则是将这一切通过连贯语法整合在了一起,连贯写法是php的特性,而larave则是将这一切提升到了一个
新的高度。
以前写代码都是查看文档api说明,然后组织自己的代码,前阵子用ai生成代码,看到一部分诡异的代码,经过查询这些语法是laravel支持的,只是文档没有说明,然后旁敲侧击,有引申出了好多这样的写法,这些写法规避了过量的嵌套使用,确实美观了不少。现整理如下。
$user = User::find(1);
$name = optional($user)->when($user->id===1, function($builder){
return $builder->getModel()->name;
}, function($builder){
return null;
});optional() 函数接受任意参数并允许你访问该对象上的属性或调用方法。如果给定的对象是 null,属性和方法将返回 null 而非引起错误,在这里,如果optional($user),如果是非空,则后边的when函数会继续执行。when的第一个参数是一个布尔值,如果是true,则执行第二个参数,如果是false,则执行第三个参数,第二个和第三个参数都是回调函数。
$user = User::find(1);
$name = optional($user)->tap(function($builder){
return $builder->getModel()->name;
});当optional($user)为非空的时候,后边的tap函数执行,tap接受一个闭包,参数就是$user的模型构造器。
$total = collect([1, 2, 3, 4])->filter(function($item){
return $item>1;
})->pipe(function($collect){
return $collect->sum();
});这是一个集合的连贯操作,先用filter()过滤掉不符合规则的数据,然后通过pipe对集合进行操作。
$user = User::find(1);
$name = optional($user)->unless($user->id===1, function($builder){
return null;
}, function($builder){
return $builder->getModel()->name;
});unless()正好和when相反如果第一个参数为true,执行第三个闭包参数,如果第一个参数为false,则第二个闭包参数
$activeUsers = User::all()
->where('active', true)
->sortByDesc('created_at')
->map(function ($user) {
return [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
];
});查询数据,条件筛选,排序,拼数据一气呵成。
先就整理这些吧,还有好多在日后慢慢总结奉上,这些连贯操作在必要的时候确实可以不用写过多的if else之类的判断,尤其是optional(),这个是连贯操作条件的核心。