在laravel中使用eloquent过滤,显示所有数据开始

Filtering using elequent in laravel, show all data to start

所以基本上我有一个包含大约 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();

在使用 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();

试试这个查询:

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