您当前的位置: 首页 >  ar

知其黑、受其白

暂无认证

  • 0浏览

    0关注

    1250博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Laravel 使用 when 替代 if-else

知其黑、受其白 发布时间:2021-08-20 11:23:20 ,浏览量:0

Laravel 使用 when 替代 if-else

在未使用 when 方法之前,我们查询数据可能像这样:

public function store(Request $request)
{
    if(!empty($request->title)){
       $where['title'] = $request->title;
    }

    if(!empty($request->key)){
       $where['key'] = $request->key;
    }
        
    $problems = Problem::where($where)->latest()->paginate(8);

    return response()->json(['status_code' => 200, 'data' => $problems]);
}

我们可以使用 when 方法来看看代码:

public function store(Request $request)
{
    $problems = Problem::when(\request('key',false), function($q, $key){
            $q->where('title', 'like', '%' . $key . '%');
        })->when(\request('category',false), function($q, $category){
            $q->where('category_id', $category);
        })->latest()->paginate(8);
}

可能看上去不是很优雅,但它强大的功能是传递参数,省去了大量if-else

再来看看 when 源码,你就知道它得运作方式了:

public function when($value, $callback, $default = null)
{
    if ($value) {
       return $callback($this, $value) ?: $this;
    } elseif ($default) {
       return $default($this, $value) ?: $this;
    }

    return $this;
}

这么看是不是就清楚了很多,这种方法也可以应用到其他框架中或自己项目中使用。

关注
打赏
1665558895
查看更多评论
立即登录/注册

微信扫码登录

0.0434s