Сортировка по красноречивым отношениям в Laravel с использованием DataTables - PullRequest
1 голос
/ 19 марта 2020

Я пытаюсь использовать DataTables для отображения списка модели приложения. Модель приложения имеет операции:

public function operations(){
    return $this->hasMany('\App\Operation', 'application_id', 'id');
}

Модель операций имеет состояние:

public function state(){
    return $this->belongsTo('App\State', 'status_id', 'id');
}

и автор операции (пользователь):

public function user(){
    return $this->hasOne('App\User', 'id', 'user_id');
}

Чтобы включить датирование, я используя этот код:

                        $(function() {
                        $('#applications-table').DataTable({
                            language: {
                                "url": "/js/Polish.json"
                            },
                            processing: true,
                            serverSide: true,
                            ajax: '{!! route('applications.data') !!}',
                            columns: [
                                { data: 'number', name: 'number', className: "vertical_middle", searchable: true},
                                { data: 'operations.0.correspondence', name: 'operations.correspondence', className: "vertical_middle", orderable: false, searchable: false},
                                { data: 'operations.0.comment', name: 'operations.comment', className: "vertical_middle", orderable: false, searchable: true},
                                { data: 'operations.0.prognosed', name: 'operations.prognosed', className: "vertical_middle", searchable: false},
                                { data: 'operations.0.state.name', name: 'operations.state.name', className: "vertical_middle", searchable: false},
                                { data: 'operations.0.created_at', name: 'operations.created_at', className: "vertical_middle", type: "date", searchable: true},

                            ]
                        });

                    });

ApplicationController обслуживает данные с использованием этого кода

        $model = Application::with(array(
        'operations' => function ($query) {
            $query->orderByDesc('operations.created_at')->with('state')->with('user');
        }
    ));

    return Datatables::of($model)->make(true);

И, наконец, проблема - таблица отображается правильно, но когда я пытаюсь отсортировать по другому столбцу, чем первое, я получаю предупреждение:

Предупреждение DataTables: таблица id = Applications-table - запрошенный неизвестный параметр 'operations.0.correspondence' для строки 0.

Честно, Я понятия не имею, как заставить это работать. Заранее спасибо.

1 Ответ

0 голосов
/ 19 марта 2020

Исправлено с помощью DB :: table

    $applications = DB::table('applications as a')
    ->join('operations as o', function($join){
        $join->on('o.application_id', '=', 'a.id')
            ->on('o.id', '=', DB::raw("(SELECT max(id) from operations WHERE operations.application_id = a.id)"));
    })
    ->join('users as u', 'o.user_id', '=', 'u.id')
    ->join('states as s', 'o.status_id', '=', 's.id')
    ->select(['a.id as a_id','a.number','o.*', 'u.name as u_name', 'u.surname as u_surname', 's.name as s_name']);

return Datatables::of($applications)->make(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...