Таблицы данных: как сохранить идентификатор при сортировке по отношению из другой таблицы (yajra, laravel)

#php #laravel #datatables

#php #laravel #таблицы данных

Вопрос:

Я использую таблицы данных из таблиц данных yajra, и у меня проблема.

У меня есть таблица данных, в которой я получаю определенные столбцы из других таблиц, например, столбец «customer» получается через отношение из другой таблицы

введите описание изображения здесь

Но когда я нажимаю кнопку сортировки по клиенту, идентификаторы меняются на идентификатор таблицы, к которой принадлежит отношение

введите описание изображения здесь

Это приводит к ошибкам в кнопках, которые у меня справа, поскольку эти идентификаторы не существуют в таблице «meos», только в таблице «locations», которая находится в отношении

Как я могу выполнить сортировку, сохранив тот же идентификатор, который у него был?

Я хочу всегда сохранять в качестве критерия порядка идентификатор таблицы, с которой я работаю, которая является таблицей «meos», принадлежащей классу «meo»

Это мой запрос

 public function query()
{
    $languageId = Auth::user()->language_id;
    return Meo::with(['businessType' => function ($query) use ($languageId) {
        $query->with(['businessTypeDescriptions' => function ($subQuery) use ($languageId) {
            $subQuery->where('language_id', '=', $languageId);
        }]);
    }])->with('location');
}
 

это моя функция getcolumns

 protected function getColumns()
{
    return [
        Column::make('id')->addClass('text-center')->title(__('digestReport.columns.id')),
        Column::make('location.location_name')->addClass('text-center')->title(__('digestReport.columns.customer')),
        Column::make('businessType')->addClass('text-center')->title(__('digestReport.columns.business_type'))->searchable(false),
        Column::computed('action')->exportable(false)->printable(false)->width(160)->addClass('text-center')->title(__('digestReport.columns.actions')),

    ];

}
 

пожалуйста, мне нужна помощь.

Спасибо 🙂

Ответ №1:

Попробуйте приведенный ниже код. Добавить ->select() инструкцию

 public function query()
{
    $languageId = Auth::user()->language_id;
    return Meo::with(['businessType' => function ($query) use ($languageId) {
        $query->with(['businessTypeDescriptions' => function ($subQuery) use ($languageId) {
            $subQuery->where('language_id', '=', $languageId);
        }]);
    }])->with('location')->select('meo-table.*');
}
 

meo-table Замените таблицу базы данных для Meo::class

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

1. спасибо за ваш ответ, но этот «-> выбрать» выбирает только столбцы внутри таблицы местоположений

2. я использовал yajra datatable с отношениями, и если я сортирую по столбцу отношения, я большую часть времени получаю ошибку, потому что идентификатор становится неоднозначным для datatable. использование оператора select решает проблему для меня.

3. хорошо, я добавил «-> select (‘id’);» но теперь я получаю другую ошибку «попытка получить свойство » businessstypedescriptions» не-объекта «, и если я его удалю, оно снова заработает

4. вам нужно было добавить свой основной tablename.* пример User::with('posts')->select('users.*')