У меня есть один 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,
});






У меня такая же проблема, и я нашел хорошее решение проблемы. у меня возникла проблема: мне нужен один столбец, содержащий объединенное значение двух столбцов таблицы отношений, которые можно сортировать и искать. так что после нескольких часов работы мне удалось создать рабочее решение. так что я поделюсь им здесь, чтобы поддерживать лучшее сообщество. Я поделюсь кодом с кратким объяснением.
шаг 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>вот и все, теперь вы можете искать и сортировать красиво! Удачного тебе шнура и хорошего дня
$model = Expenses::with('employee')->where('bookingoffice_id', Auth::user()->bookingoffice)->where('capitalsmb.expenses.active', 1)->select('expenses.*');
Это работает для меня :)