【问题标题】:laravel 5.7 : how to filter search?laravel 5.7:如何过滤搜索?
【发布时间】:2019-02-12 23:09:13
【问题描述】:

我正在尝试通过多个输入进行高级搜索:

$orders = new Order;

        if ($request->has('client_id')) {
            $orders->where('client_id' ,$request->client_id);
        }

        if ($request->has('city_id')) {
            $orders->where('city_id', $request->city_id);
        }

        dd($orders->get());

但此代码返回所有数据库记录。 如果我在一行中使用 get 方法和查询,它工作得很好!

$orders->where('city_id', $request->city_id)->get();
dd($orders);

有什么想法吗?

【问题讨论】:

  • 试试这个$orders = $orders->get();dd($orders)
  • 没用,我通过为每个子句设置变量 $orders 解决了这个问题

标签: laravel search filter


【解决方案1】:

您应该在每次添加子句时设置变量$order,例如:

$orders = new Order;

if ($request->has('client_id')) {
     $orders = $orders->where('client_id' ,$request->client_id);
}

if ($request->has('city_id')) {
    $orders = $orders->where('city_id', $request->city_id);
}
 // then run $orders->get(); or other stuff

$orders 的新值会相应更新。

您声明模型导致问题的方式非常有趣。通过使用 new 关键字创建 Order 的新实例,模型无法识别默认查询构建器(出于某种原因),这意味着 dump() 模型没有 wheres 数组可以将新的 where 推入。

您可以做的其他方法是进行初始查询,例如

Order::whereNotNull('id');

//Otherwise as suggested use `->query()` or `newQuery()`

注意query() 就像newQuery() 的别名,只是query() 在调用newQuery() 之前创建了模型的 实例。

您可以改为使用getQuery() 来检索模型的$query 属性而不是两个,因为您不需要重新实例化构建器。 因此,您可以:

 $orders = Order::getQuery();

if ($request->has('client_id')) {
     $orders->where('client_id' ,$request->client_id);
}

if ($request->has('city_id')) {
    $orders->where('city_id', $request->city_id);
}
 // then run $orders->get(); or other stuff

PS:我在 L5.4 上测试过这个

【讨论】:

    【解决方案2】:

    尝试初始化查询

    $query = Order::select("*");
    
    if ($request->has('client_id')) {
       $query->where('client_id' ,$request->client_id);
    }
    
    if ($request->has('city_id')) {
       $query->where('city_id', $request->city_id);
    }
    
    dd($query->get());
    

    【讨论】:

      【解决方案3】:

      一个简单的方法,就这样做

      $query = Order::query();
      
      if ($request->has('client_id')) {
          $query->where('client_id' ,$request->client_id);
      }
      
      if ($request->has('city_id')) {
          $query->where('city_id', $request->city_id);
      }
      
      dd($query->get());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-08
        • 2019-09-02
        • 2021-06-06
        相关资源
        最近更新 更多