问题描述
当我想使用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 (将#修改为@)