Doing nothing for others is the undoing of ourselves. - Horace Mann
Id | Name | # of Post | Created At | Updated At |
---|
public function getAdvanceFilter()
{
return view('datatables.fluent.advance-filter');
}
public function getAdvanceFilterData(Request $request)
{
$users = DB::table('users')->select([
DB::raw("CONCAT(users.id,'-',users.id) as id"),
'users.name',
'users.email',
DB::raw('count(posts.user_id) AS count'),
'users.created_at',
'users.updated_at'
])->leftJoin('posts','posts.user_id','=','users.id')
->groupBy('users.id');
$datatables = Datatables::of($users);
if ($request->get('post')) {
// having count search
$users->having('count', $request->get('operator'), $request->get('post'));
}
if ($name = $request->get('name')) {
// additional users.name search
$users->where('users.name', 'like', "$name%");
}
// Global search function
if ($keyword = $request->get('search')['value']) {
// override users.name global search
$datatables->filterColumn('users.name', 'where', 'like', "$keyword%");
// override users.id global search - demo for concat
$datatables->filterColumn('users.id', 'whereRaw', "CONCAT(users.id,'-',users.id) like ? ", ["%$keyword%"]);
}
return $datatables->make(true);
}
var oTable = $('#users-table').DataTable({
processing: true,
serverSide: true,
ajax: {
url: 'https://yajratables.tuecus.com/fluent/advance-filter-data',
data: function (d) {
d.name = $('input[name=name]').val();
d.operator = $('select[name=operator]').val();
d.post = $('input[name=post]').val();
}
},
columns: [
{data: 'id', name: 'users.id'},
{data: 'name', name: 'users.name'},
{data: 'email', name: 'users.email'},
{data: 'count', name: 'count', searchable: false},
{data: 'created_at', name: 'users.created_at'},
{data: 'updated_at', name: 'users.updated_at'}
]
});
$('#search-form').on('submit', function(e) {
oTable.draw();
e.preventDefault();
});