如何解决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文档中知道searchable
和orderable
在未写的情况下默认为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);
}
*编辑:
我已经意识到,数据表返回的响应包含如下所示的已使用查询:
新问题:查询json字段配置到底在哪里?在上面我雄辩的查询中,没有where
和like
这样的查询。在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开始索引的列数
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。