Php 我们渴望有条件的分支

Php 我们渴望有条件的分支,php,laravel-5,laravel-5.8,Php,Laravel 5,Laravel 5.8,我的if语句很难读 ProjectController.php public function index(Request $request) { $cats = Category::all(); $users = User::all(); if(!empty($request->project_name && $request->requester && $request->user_name && $r

我的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();
注意:-我正在考虑静态键,因为请求对象可能具有与筛选操作无关的其他数据


获取1个参数?@vivek_23在requestDoes
中获取一些参数,如果(!empty($request->project_name&&&$request->requester&&…)
甚至执行?我假定它认为非空字符串为true。此外,您还需要检查
!空($request->project\u name&&$request->requester&&$request->user\u name&$request->status&&$request->requester\u tell)
,并且在查询中仅使用两个字段/列
$view=project::where('project\u name','like','%'。$request->project\u name'%')->where('project\u name','like','%%.$request->requester'%')->get()?这显然是使用
空的错误方法。对于任何未实际设置的变量/索引,这仍然会给您一个未定义的变量/索引通知。函数illumb\Support\Collection:get()的参数太少,传递了0如何解决此问题?通过删除分页(10)解决。如果需要分页,请删除get并保持分页。它应该会起作用。