【问题标题】:Filtering using elequent in laravel, show all data to start在laravel中使用eloquent过滤,显示所有数据开始
【发布时间】:2021-06-17 06:02:15
【问题描述】:

所以基本上我有一个包含大约 20000 行数据的数据表,我有几个不同的过滤器,并且正在尝试找出应用过滤器的最佳方法。我基本上已经将它们应用于 elequent 查询,除了 where like 语句最初将是 "" ,这对于任何有数据的行都很好,除了一些行有 NULL ,它不包含在 like "" 语句中。我应该这样做有更好的方法吗?还是我只需要写一些 if 语句来检查是否需要应用过滤器

        // Fetch records
    $records = IndirectAggregate::orderBy($columnName,$columnSortOrder)
        ->where('wholesaler', 'like', '%' . $search_wholesaler . '%')
        ->where('state', 'like', '%' . $search_state . '%')
        ->where('banner_name', 'like', '%' . $search_banner . '%')
        ->select('*')
        ->skip($start)
        ->take($rowperpage)
        ->get();

【问题讨论】:

  • 你的意思是如果$search_wholesaler有值,那么你必须应用过滤器,否则不是??

标签: php laravel datatable


【解决方案1】:

试试这个查询:

$records = IndirectAggregate::orderBy($columnName,$columnSortOrder)
->where(function($q) use($search_wholesaler){
  $q->where('wholesaler', 'like', '%' . $search_wholesaler . '%')
  ->orWhereNull('wholesaler');
})
->where(function($q) use($search_state){
  $q->where('state', 'like', '%' . $search_state . '%')
  ->orWhereNull('state');
})
->where(function($q) use($search_banner){
  $q->where('banner_name', 'like', '%' . $search_banner . '%')
  ->orWhereNull('banner_name');
})
->select('*')
->skip($start)
->take($rowperpage)
->get();

【讨论】:

    【解决方案2】:

    使用 like 时最好使用 orWhere。

     $records = IndirectAggregate::orderBy($columnName,$columnSortOrder)
            ->where('wholesaler', 'like', '%' . $search_wholesaler . '%')
            ->orWhere('state', 'like', '%' . $search_state . '%')
            ->orWhere('banner_name', 'like', '%' . $search_banner . '%')
            ->select('*')
            ->skip($start)
            ->take($rowperpage)
            ->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2017-03-09
      • 2022-01-03
      相关资源
      最近更新 更多