Laravel 使用 when 替代 if-else

Posted willem_chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 使用 when 替代 if-else相关的知识,希望对你有一定的参考价值。

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;
}

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

以上是关于Laravel 使用 when 替代 if-else的主要内容,如果未能解决你的问题,请参考以下文章

php Laravel条件查询使用When

laravel使用when搜索遇到状态参数(有0的状态)的坑

CASE 表达式 WHEN 的更短替代方案?

调用包含的模板时“If-element”没有反应

laravel多字段模糊查找,用when+orwhere时其他条件失效

laravel多字段模糊查找,用when+orwhere时其他条件失效