Laravel Yajra数据表全局搜索过滤器

时间:2020-10-28 07:26:00

标签: laravel filter datatable yajra-datatable

当我想使用laravel yajra数据表编写自定义全局搜索查询时,我遇到了技术难题

参考 https://yajrabox.com/docs/laravel-datatables/master/filter-column

当我通过传递日历日期和searchbox值进行搜索时,我被困在正确的书写方式上

仅主->filter got triggered

->filterColumn skipped through ....不确定为什么...

在sql vanila中,是

where firstname like %search% OR
lastname like %search% OR
fullname like %search% OR
email like %search% OR
sponsorby like %search% OR
createddate like %date%

这是我的代码供参考。未触发filterCustom ...

if ($request->ajax()) {

    $users = \DB::select('
    SELECT id, usercode as membercode, concat(firstname, " ", lastname) as fullname, email, created_at as createddate, (select concat(firstname, " ", lastname) from users where id= m.parentid) sponsorby
    FROM users m 
    ORDER BY m.created_at ASC');

更新:我意识到yajra不支持带有完整原始sql的DB :: select,但是它支持DB :: table 因此,我将sql更改为以下

        $users = \DB::table('users')
            ->select('id', 'usercode as membercode', \DB::raw('concat(firstname, " ", lastname) as fullname'), 'email', 'created_at as createddate', \DB::raw('(select concat(firstname, " ", lastname) from users as b where b.id= users.parentid) as sponsorby'));
  //end

     return Datatables::of($users)

             ->addColumn('membercode', function($row){
                $content= $row->membercode;
               return $content;
            })

            ->addColumn('fullname', function($row){
                $content= $row->fullname;
               return $content;
            })
            
            ->addColumn('email', function($row){
                $content= $row->email;
               return $content;
            })        

            //etc




                ->filter(function ($sql) use ($request) {
                     
                     $search = $request->search;

                     if (!empty($search)) 
                     {
                                                         
                        $sql->Where('email', 'LIKE', "%$search%");                           
                     }

                 })

                ->filterColumn('fullname', function($query, $request) {
                    $search = $request->search;
                    $sql = 'concat(firstname, " ", lastname)  like ?';
                    $query->whereRaw($sql, ["%{$search}%"]);
                })

                ->filterColumn('membercode', function($query, $request) {
                    $search = $request->search;
                    $sql = 'usercode as membercode  like ?';
                    $query->whereRaw($sql, ["%{$search}%"]);
                })

                ->filterColumn('createddate', function($query, $request) {
                    $search = $request->date;
                    $sql = 'created_at as createddate  like ?';
                    $query->whereRaw($sql, ["%{$search}%"]);
                })

                 ->filterColumn('sponsorby', function($query, $request) {
                    $search = $request->search;
                    $sql = '(select concat(firstname, " ", lastname) from users as b where b.id= users.parentid)   like ?';
                    $query->whereRaw($sql, ["%{$search}%"]);
                })

             ->make(true);
 }

0 个答案:

没有答案