Laravel Yajra Datatables可搜索,无法在愿望列上使用

问题描述

我有这样的数据表列:

var showMasterUserTable = function () {
        masterIcon = $('#master_user_table').DataTable({
            processing: true,serverSide: true,responsive: true,ajax: {
                url: ROOT + 'master-voucher-bit-x/data',},columns: [
                {
                    data: 'DT_RowIndex',name: 'DT_RowIndex',searchable: false,orderable: false
                },{
                    data: 'voucher_code',name: 'voucher_code',{
                    data: 'status',name: 'status',{
                    data: 'track',name: 'track',{
                    data: 'user_use',name: 'user_use',orderable: true
                },{
                    data: 'progress',name: 'progress',{
                    data: 'quiz_score',name: 'quiz_score',{
                    data: 'urlQr',name: 'urlQr',}
            ]
        });
    };

只要我从yajra和datatables文档中知道searchableorderable在未写的情况下默认为true,我就遇到过这样的问题:仅可搜索voucher_code列,无论我是否将所有searchable都设置为true。我想搜索user_use列。如果我将所有searchable设置为false,则无法加载表数据。我应该如何克服呢?这是我的控制器代码:

    {
        $model =  VoucherBitX::select('voucher_bit_x.*','users.email')
        ->join('users','voucher_bit_x.user_id','=','users.id')
        ->orderBy("voucher_bit_x.redeem_at","DESC");

        return DataTables::of($model)
                ->addColumn('status',function ($data) {
                    if($data->status > 0)
                        $status = '<div><span class="badge badge-success"> Available </span></div>';
                        else
                            $status = '<div><span class="badge badge-danger"> Not Available </span></div>';
                    return $status;
                })
                ->addColumn('urlQr',function ($data) {
                    $user = UserApp::find($data->user_id);
                    $a = "";
                    if(!empty($user) && isset($user->ref_id)){
                        $quiz = QuizScore::where("track_id",$data->track_id)->where("user_id",$data->user_id)->first();
                        if($quiz && $quiz->status){
                            $track = Track::find($data->track_id);
                            $urlQr = 'https://xxx.id/api/certificate/'.base64_encode(json_encode(["user_id"=>$user->id,"slug"=>$track->slug,"track_id"=>$track->id]));
                            $a = '<a href="'.$urlQr.'">Download Certificate</a>';
                        }
                    }
                    return $a;
                })
                ->addColumn('quiz_score',function ($data) {
                    $score = 0;
                    $quiz = QuizScore::where("track_id",$data->user_id)->first();
                        if($quiz){
                            $score = $quiz->score;
                        }
                    return $score;
                })
                ->addColumn('progress',function ($data) {
                    $progress = 0;
                    $solve = Track::userProgress($data->user_id,$data->track_id);
                        if(!empty($solve)){
                            $progress = $solve;
                        }
                    return $progress."%";
                })
                ->addColumn('user_use',function ($data) {
                    $user = UserApp::find($data->user_id);
                    if(!empty($user))
                        return $user->name." (".$user->email.")";
                    return '-';
                })
                ->addColumn('track',function ($data) {
                    $track = Track::find($data->track_id);
                    return isset($track->title)?$track->title:"";
                })->rawColumns(['quiz_score','status','user_use','track','urlQr'])
                ->addIndexColumn()->make(true);
    }

*编辑: 我已经意识到,数据表返回的响应包含如下所示的已使用查询:

enter image description here

新问题:查询json字段配置到底在哪里?在上面我雄辩的查询中,没有wherelike这样的查询。在yajra和datatables文档中都没有发现这些东西。我想要的是将where字段修改为users.email而不是voucher_bit_x.voucher_code

解决方法

使用 columns.searchable

使用此参数,可以定义DataTables是否应在表的可过滤数据中包括此列。您可能要使用此选项来禁用对生成的列的搜索,例如,“编辑”和“删除”按钮。

   $('#example').dataTable( {
     "columnDefs": 
     [
        { "searchable": false,"targets": 0 }
     ]
   });

这将禁用对目标中指定的多个列的搜索。如果您想要多列,请尝试使用

{ "searchable": false,"targets": [0,1,2] }

目标0 1和2是从0开始索引的列数

相关问答

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