#laravel #datatables
Вопрос:
У меня есть пользовательский фильтр, который я хочу использовать для поиска роли пользователя. Роль возвращена правильно и доступна для поиска с использованием моего существующего кода. Однако, если поисковый запрос даже частично совпадает с чем-то другим в любой строке, ajax даже покажет другие, не относящиеся к делу строки.
Что мне нужно, так это сделать запрос, специфичный для одного столбца.
Это запрос, который я использую для запуска поиска из выпадающего меню:
$("#users-list-role").on("change", function () {
var usersRoleSelect = $("#users-list-role").val();
usersTable.columns(1).search(usersRoleSelect).draw();
});
Это и есть база данных:
var usersTable = $('#users_list_table').DataTable({
columnDefs: [
{
targets: [0,1,2],
className: 'center'
}
],
responsive: true,
processing: true,
serverSide: true,
ajax: {
url: formedURL,
},
columns: [
{data: 'full_name', name: 'full_name'},
{data: 'roles', name: 'roles.name'},
{data: 'email', name: 'email'},
{data: 'first_name', name: 'first_name', searchable: true, visible: false },
{data: 'middle_name', name: 'middle_name', searchable: true, visible: false },
{data: 'last_name', name: 'last_name', searchable: true, visible: false },
],
language: {
"url": langURL
},
initComplete:function( settings, json){
$("#employeeTableCard").addClass("scale-in");
}
И это вызов Ajax в контроллере:
public function listUsersData(Request $request)
{
if(!$request->ajax())
return Redirect::route('/');
$users = User::with('roles');
return DataTables::of($users)
->addColumn('full_name', '{!!$first_name!!} {!!$middle_name!!} {!!$last_name!!}')
->addColumn('roles', function($users){ return $users->getRoleNames()->first(); })
->make(true);
}
Ответ №1:
Что ж, еще раз: это было простое решение.
Все, что мне было нужно, это добавить
->select('users.*');
Для
$users = User::with('roles')
Это решило проблему поиска отношений, и это даже задокументировано:
$users = User::with('roles')->select('users.*');