【问题标题】:We are craving with conditional branch我们渴望条件分支
【发布时间】:2019-09-03 13:33:05
【问题描述】:

我的 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

【问题讨论】:

  • empty 需要 1 个参数?
  • @vivek_23 在请求中获取一些参数
  • if(!empty($request->project_name && $request->requester && ... )) 会执行吗?我认为它认为非空字符串为真。
  • 另外,您检查 !empty($request->project_name && $request->requester && $request->user_name && $request->status && $request->requester_tell) 并在查询中仅使用 2 个字段/列 $view = Project::where('project_name', 'like', '%'. $request->project_name .'%')->where('project_name', 'like', '%'. $request->requester .'%')->get();?
  • 这绝对是使用empty 的错误方式。对于任何没有实际设置的变量/索引,这仍然会给你一个未定义的变量/索引通知。

标签: php laravel-5 laravel-5.8


【解决方案1】:

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

$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();

注意:-我正在考虑静态键,因为请求对象可能有其他与过滤操作无关的数据。

【讨论】:

  • 函数 Illuminate\Support\Collection 的参数太少:get (),passed 0 如何解决这个问题?
  • 删除分页解决(10)
  • 如果您需要分页,则删除 get 并保持分页。它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 2014-05-15
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
相关资源
最近更新 更多