Saya memerlukan filter data menggunakan drop-down kustom. Saya memiliki data yang ditampilkan dalam bentuk yang baik sekarang saya memerlukan dropdown kustom di header untuk memfilter data dengan nilai dropdown [Catatan: saya perlu menyediakan nilai dropdown ini untuk filter di kueri laravel. Ini adalah nilai khusus sehingga saya perlu memfilter data menggunakan nilai khusus ini.]
Kode ini berfungsi untuk filter default tetapi saya telah menambahkan dropdown menggunakan jquery jadi saya harus meneruskan nilai ini di kueri laravel untuk memfilter data.
$(function () {
var t = $('#user').DataTable({
order: [[ 0, 'desc' ]],
processing: true,
serverSide: true,
ajax: {
url: '{!! route('datatables.data') !!}',
data: function(d) {
d.name = $('input[name=name]').val();
d.email = $('input[name=email]').val();
}
},
columns: [
{ data: 'id', name: 'id' },
{ data: 'name', name: 'name' },
{ data: 'email', name: 'email' },
{ data: 'arrival_date', name: 'arrival_date', orderable: true, searchable: true },
{ data: 'pick_up', name: 'pick_up', orderable: true, searchable: true },
{ data: 'destination', name: 'destination', orderable: true, searchable: true},
{ data: 'trekking_start_date', name: 'trekking_start_date', orderable: true, searchable: true},
{ data: 'trekking_end_date', name: 'trekking_end_date', orderable: true, searchable: true},
{ data: 'action', name: 'action', orderable: false, searchable: false},
]
});
});
$(document).ready(function() {
$('<label style="margin-left: 10px;">Filter by ' +
'<select class="form-control input-sm">'+
'<option value="volvo">Completed Trip</option>'+
'<option value="saab">Upcoming Trip</option>'+
'</select>' +
'</label>').appendTo("#user_wrapper #user_length");
});
Dan kode kueri saya di laravel
public function getClients(Request $request)
{
if($request->ajax()) {
return Datatables::of(DB::select(DB::Raw('SELECT * FROM users WHERE id NOT IN (SELECT user_id FROM role_user) ORDER BY users.id DESC')))
//}))
->addColumn('arrival_date', function($user){
if(isset(Helper::getFlightsByClientID($user->id)->arrival_date)) {
return date('M j, Y', strtotime(Helper::getFlightsByClientID($user->id)->arrival_date));
} else {
return 'N/A';
}
})
->addColumn('pick_up', function($user){
if(isset(Helper::getFlightsByClientID($user->id)->pick_up)) {
return Helper::getFlightsByClientID($user->id)->pick_up == 1 ? 'Yes' : 'No';
} else {
return 'N/A';
}
})
->addColumn('destination', function($user){
if(isset(Helper::getTreksByClientID($user->id)->trekking_region_id)) {
return Helper::getTrekByID(Helper::getTreksByClientID($user->id)->trekking_region_id)->name;
} else {
return 'N/A';
}
})
->addColumn('trekking_start_date', function($user){
if(isset(Helper::getTreksByClientID($user->id)->trekking_start_date)) {
return date('M j, Y', strtotime(Helper::getTreksByClientID($user->id)->trekking_start_date));
} else {
return 'N/A';
}
})
->addColumn('trekking_end_date', function($user){
if(isset(Helper::getTreksByClientID($user->id)->trekking_end_date)) {
return date('M j, Y', strtotime(Helper::getTreksByClientID($user->id)->trekking_end_date));
} else {
return 'N/A';
}
})
->addColumn('action', function($user){
$html = '';
$html .= '<a class="btn bg-green btn-flat btn-xs" href="'.route('user.clients.edit', $user->id).'">Edit</a>';
if(auth()->user()->hasRole('superadmin')) {
$html .= ' <a onclick="if(!confirm(\'Are u sure to delete?\')) return false;" class="btn bg-red btn-flat btn-xs" href="'.route('user.clients.delete', $user->id).'">Delete</a>';
}
return $html;
})
->make(true);
} else {
abort(400, 'Bad Request.');
}
}
Jika berlaku, harap sertakan salinan kode Anda yang memicu bug yang dicurigai. Anda dapat menggunakan tag kode php penurunan harga untuk memformat tempel Anda: md5-29f7d4c1ff52f0e396b313bfe2550e56
@shankhadevpadam Anda dapat melakukan ini dengan berbagai cara. Tapi yang saya lakukan adalah meneruskan pembuat kueri sebelum datatables di Server Side.
$model = new Example();
$model->where('column_to_filter','=',$this->request->get('filter_by'));
return datatables()->eloquent($model);
Anda tentu saja dapat melakukan IF bersyarat.
$model = new Example();
if($this->request->has('name')) {
$model->where('name','=','predefined value');
}
return datatables()->eloquent($model);
Jika Anda tidak ingin melakukan contoh di atas, Anda dapat merujuk ke dokumen. Pencarian Kolom Posting , Filter Kustom
Pertanyaan saya adalah bagaimana mengikat dropdown seperti gambar di atas, saya telah mengikatnya melalui jquery kustom tetapi saya perlu mengikat menggunakan datatable dan nilai ini harus tersedia ketika dropdown berubah. [Silakan lihat cuplikan kode saya]
Tambahkan id
pada kotak pilih.
<select class="form-control input-sm" id="custom-filter">
Kemudian sertakan di parameter permintaan.
ajax: {
url: '{!! route('datatables.data') !!}',
data: function(d) {
d.name = $('input[name=name]').val();
d.email = $('input[name=email]').val();
d.filter = $('#custom-filter').val();
}
},
Kemudian lakukan filter yang diperlukan di sisi server.
if ($filter = request('filter')) {
$query->where('filter', $filter);
}
Anda perlu memicu gambar saat filter diubah. Mungkin sesuatu seperti:
<select class="form-control input-sm" id="custom-filter" onchange="$('#user').DataTable().draw()">
Juga, Anda menggunakan koleksi. Mengubah
DB::select(DB::Raw('SELECT * FROM users WHERE id NOT IN (SELECT user_id FROM role_user) ORDER BY users.id DESC'))
Untuk sesuatu seperti:
DB::table('users')->whereNot(...);
Terima kasih sekarang bekerja.
Selamat datang, jangan lupa untuk memberi bintang pada proyek jika Anda merasa berguna. :) Terima kasih!
Dropdown berfungsi dengan sempurna tetapi tampilan data setelah perubahan nilai di dropdown tidak diatur dengan benar.
Anda ingin memesan berdasarkan tanggal saat difilter? Anda perlu melakukan ini pada level js
. Atau atur urutan default ke kolom itu.
Ya, Tolong contoh apa saja.
Tidak punya contoh. Lihat dokumen js api resmi https://datatables.net/reference/api/ untuk referensi. Triknya adalah dengan melakukan perintah js order manual sebelum melakukan fungsi gambar ulang tabel.
@yajra Bagaimana menerapkan yang setara dalam datatables sebagai layanan?
data: function(d) {
d.name = $('input[name=name]').val();
d.email = $('input[name=email]').val();
d.filter = $('#custom-filter').val();
}
@sistemaswebbrasil menggunakan minifiedAjax()
:
$script = '
data.name = $('input[name=name]').val();
data.email = $('input[name=email]').val();
data.filter = $('#custom-filter').val();
';
return $this
->builder()
...
->minifiedAjax($url = '', $script = null, $data = [])
Komentar yang paling membantu
Anda perlu memicu gambar saat filter diubah. Mungkin sesuatu seperti:
Juga, Anda menggunakan koleksi. Mengubah
Untuk sesuatu seperti: