Заполнение выпадающего списка с помощью обработки данных на стороне сервера

Я работаю с 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, возвращаемые контроллером, как показано ниже: датируемые данные JSON

Я пытался следовать этому Github Gist. Но я не могу решить это.

0 ответов

Другие вопросы по тегам