Порядок таблиц данных Laravel по столбцу отношений не работает

У меня есть один 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,
            });
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
0
11 370
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

шаг 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.*');
 

Это работает для меня :)

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