Заполнение выпадающего списка с помощью обработки данных на стороне сервера
Я работаю с Laravel 5.6 и Laravel Datatables. У меня есть таблица, где я реализовал функцию поиска отдельных столбцов Datatables с плагином Select2. Таблица данных работает хорошо. Но проблема в том, что он показывает только значения столбцов первой страницы. Мне нужно, чтобы все уникальные значения столбца в поле выбора. Следовательно, я отправил больше столбцов JSON с данными. Но я не могу найти способ, чтобы заполнить данные в выбор вариантов данных. Вот мой код представления с помощью скрипта jquery datatables:
@section('content')
<div class="row">
<div class="col-md-12">
<div class="portlet light">
<div class="portlet-body">
<table class="table table-striped table-bordered table-hover" id="artist_earning_table">
<thead>
<tr>
<th> Month</th>
<th> Name</th>
<th> Income</th>
<th> Rate</th>
<th> Total </th>
</tr>
</thead>
<tfoot style="display: table-header-group;">
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
</tfoot>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script>
$(document).ready(function () {
$('#artist_earning_table').DataTable({
"processing": true,
"serverSide": true,
"ajax": "{{ url('reports/artist_earning_data') }}",
"columns": [
{ data: 'month', name: 'month' },
{ data: 'artist_name', name: 'artist_name' },
{ data: 'artist_usd_earning', name: 'artist_usd_earning' },
{ data: 'exchange_rate', name: 'exchange_rate' },
{ data: 'artist_bdt_earning', name: 'artist_bdt_earning' }
],
"initComplete": function () {
this.api().columns([0, 1]).every(function (settings, json) {
var column = this;
var select = $('<select class="multi-select-filter" multiple="multiple" style="width: 100%;"><option value=""></option></select>')
.appendTo($(column.footer()).empty())
.on('change', function () {
var vals = $('option:selected', this).map(function (index, element) {
return $.fn.dataTable.util.escapeRegex($(element).val());
}).toArray().join('|');
column.search(vals.length > 0 ? '^(' + vals + ')$' : '', true, false)
.draw();
});
column.data().unique().sort().each(function (d, j) {
select.append('<option value="' + d + '">' + d + '</option>')
});
});
$('.multi-select-filter').select2({
allowClear: true
});
},
"bJQueryUI": true,
"responsive": true,
"autoWidth": false
});
});
</script>
@endsection
Вот мой код маршрута:
Route::get('reports/artist_earning', 'ReportController@artistEarning');
Route::get('reports/artist_earning_data', 'ReportController@artistEarningData');
Вот мои функции контроллера, которые взаимодействуют с упомянутыми маршрутами: public function artistEarningData(Request $request) {
$user = Auth::user();
$artist_earnings = DB::table('content_earning_details')
->select('label_id', 'month', 'year', 'title', 'artist_name', 'exchange_rate',
DB::raw('sum(artist_usd_earning) as artist_usd_earning'),
DB::raw('sum(artist_bdt_earning) as artist_bdt_earning')
)
->groupBy('artist_name', 'month')
->get();
}
$datatable = Datatables::of($artist_earnings);
if($request->draw == 1) {
$month = DB::table('content_earning_details')->distinct('month')->pluck('month');
$artists = DB::table('content_earning_details')->distinct('artist_name')->pluck('artist_name');
$datatable->with([
'allMonths' => $month,
'allArtists' => $artists
]);
}
return $datatable->make(true);
}
Данные в формате json, возвращаемые контроллером, как показано ниже:
Я пытался следовать этому Github Gist. Но я не могу решить это.