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

问题描述

当我想使用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',$request) {
                    $search = $request->search;
                    $sql = 'usercode as membercode  like ?';
                    $query->whereRaw($sql,["%{$search}%"]);
                })

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

                 ->filterColumn('sponsorby',$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);
 }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...