Столбец Laravel Datatables по столбцам отношений не работает - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть один User, которого можно назначить многим Company. Я пытаюсь визуализировать таблицу с помощью Laravel Datatables и jQuery Datatables. Он хорошо визуализируется и, щелкая значок заказа в заголовке таблицы, сортирует данные по этому столбцу, за исключением того, что он не работает для столбца отношений company_name. Это мой код в контроллере:

$users = User::with(['roles','companies'])
        ->where('users.id', '!=', Auth::id())
        ->whereHas('roles', function($q){$q->whereId(Role::ROLE_6);});

...

return Datatables::of($users)
->editColumn('company', function (User $user) {
                return $user->hasCompanies()? $user->companies->first()->company_name : trans('lang.company.not_assigned');
            })
->orderColumn('company', 'company')
->make(true);

А это мой javascript для таблиц данных:

otable = $('#datatable_fixed').DataTable({
                "ajax": {
                    url: 'users/datatable',
                    type: 'POST',
                },
                "pageLength": 15,
                "processing": true,
                "stateSave": true,
                "serverSide": true,
                "bDestroy": true,
                columns: [
                    {data: 'first_name', name: 'first_name'},
                    {data: 'last_name', name: 'last_name'},
                    {data: 'company', name: 'company.company_name'},
                    {data: 'email', name: 'email'},
                    {data: 'status', name: 'status'},
                ],
                dom: 'Bfrtip',
                searching: false,
                "order": [[0, 'asc']],
                "autoWidth": true,
            });

1 Ответ

0 голосов
/ 31 октября 2018

У меня та же проблема, и я нашел хорошее решение проблемы. проблема в том, что мне нужен один столбец, который содержит объединенное значение двух столбцов таблицы взаимосвязей, которые можно сортировать и искать. поэтому после нескольких часов работы мне удалось создать рабочее решение. поэтому я поделюсь этим здесь для поддержания лучшего сообщества. Я поделюсь кодом с кратким объяснением.

шаг 01:

У меня есть настольные поездки с множеством отношений с водителями, клиентами, транспортными средствами и компаниями. и я хотел создать еще одну каскадную колонку с драйверами. имя столбца + колонка drivers.code с псевдонимом драйверов.

запрос ниже работает для меня выше.

$rides = Ride::select(['rides.*',DB::raw('CONCAT(drivers.code," - ",drivers.name) AS driver')])->with(['drivers','customers','vehicles','companies'])->join('drivers','rides.driver_id','=', 'drivers.id');

шаг 02: после этого запроса большая часть вашей работы выполнена. после этого я добавил приведенный ниже код к этому методу ajax загрузки данных из таблицы данных, что будет делать этот код для поиска и сортировки.

var table = $('#myTable').DataTable({
                "processing":true,
                "serverSide":true,
                "ajax": "{{route('ajax.view.rides')}}",
                "columns": [
                   
                    {data: 'driver', name: 'driver', searchable:false},
                    {data: 'drivers.code', name:'drivers.code', searchable: true, sortable : true, visible:false},
                    {data: 'drivers.name', name:'drivers.name', searchable: true, sortable : true, visible:false},
                   
                ],
                responsive:true,
                order:[0,'desc']
            });

объединенный столбец, добавленный в наш запрос, делает возможной сортировку

{data: 'driver', name: 'driver', searchable:false},

этот код сделает возможным поиск по обоим столбцам

{data: 'drivers.code', name:'drivers.code', searchable: true, sortable : true, visible:false},
{data: 'drivers.name', name:'drivers.name', searchable: true, sortable : true, visible:false},

теперь вам нужно добавить два дополнительных тега в элемент потока таблицы HTML.

<thead>
  <tr>
    <th>Driver</th> <!-- this one will display the concatenated column -->
    <th>Driver</th> <!-- this one is for the hidden hidden column that enables the search on one column -->
    <th>Driver</th> <!-- this one is for the hidden hidden column that enables the search on one column -->
  </tr>
</thead>

вот и все, теперь вы можете красиво искать и сортировать! Удачного вам шнурка и хорошего дня

...