Sql Laravel-忽略条件的情况

Sql Laravel-忽略条件的情况,sql,laravel,Sql,Laravel,我使用的是Laravel 5.2 我构建了一个查询来检索一些订单。 查询最多可以使用三个筛选器 订单类型 订单状态 关键字(用户输入) 情况 如果用户过滤订单类型和/或订单状态,则工作正常 问题 如果一个过滤器只获取发送的订单,但输入Anna,它将获得类型B订单,这是错误的,因为它是正在进行中 问题 我知道这是由于添加了where和或where引起的,但我找不到解决方案 数据 查询 您应该将闭包传递给或where,以便能够将语句分组到括号中。大概是这样的: $orderLines->whe

我使用的是
Laravel 5.2

我构建了一个查询来检索一些订单。 查询最多可以使用三个筛选器

  • 订单类型
  • 订单状态
  • 关键字(用户输入)
  • 情况 如果用户过滤
    订单类型
    和/或
    订单状态
    ,则工作正常

    问题 如果一个过滤器只获取
    发送的
    订单,但输入
    Anna
    ,它将获得
    类型B
    订单,这是错误的,因为它是
    正在进行中

    问题 我知道这是由于添加了
    where
    或where
    引起的,但我找不到解决方案

    数据 查询
    您应该将闭包传递给
    或where
    ,以便能够将语句分组到括号中。大概是这样的:

    $orderLines->where('order_line_items.last_activity','like', '%'.request('keyword') .'%')
        ->orWhere(function ($query) {
            $query->orWhere('users.first_name','like', '%'.request('keyword') .'%')
                  ->orWhere('users.last_name','like', '%'.request('keyword') .'%')
                  ->orWhere('users.username','like', '%'.request('keyword') 
        })
    

    阅读文档中的更多内容<代码>参数分组部分。

    您是否可以检查sql日志,可能是您正在获取查询或条件
    username=anna或order status=sent
    根据这一点,结果很好,查询应该连接到
    并且
    它没有解决问题
    if (request()->has('keyword')) {
            $orderLines->where(function ($query) {
                    $query->orWhere('order_line_items.last_activity','like', '%'.request('keyword') .'%')
                        ->orWhere('users.first_name','like', '%'.request('keyword') .'%')
                        ->orWhere('users.last_name','like', '%'.request('keyword') .'%')
                        ->orWhere('users.username','like', '%'.request('keyword') .'%')
            }
    }
    
    $orderLines->where('order_line_items.last_activity','like', '%'.request('keyword') .'%')
        ->orWhere(function ($query) {
            $query->orWhere('users.first_name','like', '%'.request('keyword') .'%')
                  ->orWhere('users.last_name','like', '%'.request('keyword') .'%')
                  ->orWhere('users.username','like', '%'.request('keyword') 
        })
    
    if (request()->has('keyword')) {
            $orderLines->where(function ($query) {
                    $query->orWhere('order_line_items.last_activity','like', '%'.request('keyword') .'%')
                        ->orWhere('users.first_name','like', '%'.request('keyword') .'%')
                        ->orWhere('users.last_name','like', '%'.request('keyword') .'%')
                        ->orWhere('users.username','like', '%'.request('keyword') .'%')
            }
    }