Сортировка при запросе цепочки с использованием серверной функции laravel datatables

#php #laravel #eloquent #datatables #yajra-datatable

#php #laravel #красноречивый #таблицы данных #яджра-поддающийся обработке

Вопрос:

Я пытаюсь отсортировать столбец с именем agency_name. Но это не работает. Full_name отлично работает, в то время как столбец agency_name не работает. Итак, в основном я пытаюсь получить доступ к данным, которые находятся в таблице user_work_experiences, поэтому я получаю к ним доступ через таблицу user и получаю текущий пользовательский опыт работы. Я использую пакет yajra / datatables. Итак, здесь моя структура таблицы выглядит: —

Студенческие общежития

  • user_id

Пользователи:

  • ID

Опыт работы с пользователями

  • user_id
  • agency_name

Вот пример кода:

Контроллер:

 public function getHostels()
{
    $hostels = StudentHostel::with('user', 'user.userProfile', 'user.currentWorkExperience', 'status')->limit(100)->select('student_hostels.*');

    return Datatables::of($hostels)
        ->addIndexColumn()
        ->editColumn('user.full_name', function (StudentHostel $hostel) {
            return $hostel->user->full_name;
        })
        ->editColumn('user.userProfile.address_1', function(StudentHostel $hostel) {
            return $hostel->user->userProfile ? $hostel->user->userProfile->address_1 . " " . $hostel->user->userProfile->address_2 : null;
        })
        ->addColumn('action', 'backEnd.hostel.datatables_action')
        ->orderColumn('user.full_name', function ($query, $order) {
            $query->whereHas('user', function ($q) use($order) {
               $q->orderBy('full_name', $order);
            });
        })
        ->orderColumn('user.current_work_experience.agency_name', function ($query, $order) {
            $query->whereHas('user', function ($q) use ($order) {
                $q->whereHas('currentWorkExperience', function ($q) use ($order) {
                    $q->orderBy('agency_name', $order);
                });
            });
        })
        ->orderByNullsLast()
        ->make(true);
}
 

Число просмотров:

 $('#hostel_datatable').DataTable({
    processing: true,
    serverSide: true,
    ajax: "{{ route('hostel.application.list') }}",
    columns: [
        {data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false},
        {data: 'user.full_name', name: 'user.full_name'},
        {data: 'user.current_work_experience.agency_name', name: 'user.current_work_experience.agency_name'},
        {data: 'user.userProfile.address_1', name: 'user.userProfile.address_1', orderable: false, searchable: false},
        {data: 'status.base_setup_name', name: 'status.base_setup_name', orderable: false, searchable: false},
        {
            data: 'action',
            name: 'action',
            orderable: true,
            searchable: true
        },
    ]
});
 

Я надеюсь, что вы, ребята, сможете мне помочь. Большое вам спасибо 🙂

Комментарии:

1. Уже получил ответ? Та же проблема!

2. @NickAudenaerde пока нет. Я перехожу к использованию базовой разбивки на страницы. Я думаю, что для таблиц данных лучше использовать query builder вместо eloquent