我们渴望有条件的分支

We are craving with conditional branch

我的if语句很难读
ProjectController.php

public function index(Request $request)
{
    $cats = Category::all();
    $users = User::all();
    if(!empty($request->project_name && $request->requester && $request->user_name && $request->status && $request->requester_tell))
    {
        $view = Project::where('project_name', 'like', '%'. $request->project_name .'%')->where('project_name', 'like', '%'. $request->requester .'%')->get();
    } if(!empty($request->project_name && $request->requester && $request->user_name && $request->status))
    {   
        $view = Project::where('project_name', 'like', '%'. $request->project_name .'%')->paginate(10)->get();
    }else if(!empty($request->project_name && $request->requester && $request->user_name))
    {
        $view = Project::where('requester', 'like', '%'. $request->requester .'%')->paginate(10)->get();
    } else if(!empty($request->project_name && $request->requester))
    {
        $view = Project::where('user_name', 'like', '%'. $request->user_name .'%')->paginate(10)->get();
    } else if(!empty($request->project_name))
    {
        $view = Project::where('status', 'like', '%'. $request->status .'%')->paginate(10)->get();
    } else if(!empty($request->project_name || $request->requester || $request->user_name || $request->status || $request->requester_tell))
    {
        $view = Project::where('requester_tell', 'like', '%'. $request->requester_tell .'%')->paginate(10)->get();
    } else if(!empty($request->requester && $request->user_name))
    {

    } else if(!empty($request->status && $request->requester_tell))
    {

    } else if(!empty($request->requester && $request->requester_tell))
    {

    } else {
    };

写到这里了,想知道有没有更好的写法 我想从数据库中拉取符合搜索条件的数据

原来都包含null

您可以创建一个键数组并在该数组上循环。在循环内部,您可以检查它是否为空,如果不是,则应用条件。

$relevantKeys = ["project_name", "requester", "user_name", "status", "requester_tell"];
$query        = Project::select("*");
foreach ($relevantKeys as $value) {
    if (!empty($request->{$value})) {
        $query = $query->where($value, 'like', '%' . $request->{$value} . '%');
    }
}
$view = $query->paginate(10)->get();

Note:- I am considering static keys as request object may have other data which is not relevant for filter operation.