2015-03-06 2 views
1

У меня есть приложение, сделанное в Laravel 5 с использованием пакета Доверьте:Как фильтровать Laravel 5 красноречивый запроса с использованием предаст

https://github.com/Zizaco/entrust/tree/laravel-5

У меня есть запрос, который уже работает прекрасно, что получает разбитые на страницы пользователей, которые соответствуют поиску строка так:

User::like($search)->skip($offset)->take($limit)->get() 

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

User::like($search)->hasRole('admin)->skip($offset)->take($limit)->get() 
+0

Если это точный код, который не работает, он имеет синтаксическую ошибку. – ceejayoz

ответ

2

Вы могли бы попробовать что-то вроде этого:

User::whereHas('roles', function($q) { 

    $q->where('name', 'admin'); 

})->skip($offset)->take($limit)->get(); 

Я не думаю, что hasRole() можно использовать в качестве рамки запроса, но я могу ошибаться. Я считаю, что для одиночных пользователей проверяют нравится:

if (Auth::user()->hasRole('admin')) { 

    // Logged in user has the admin role... 
} 
+0

Ваше предположение верно, вы не можете использовать 'hasRole' в области запроса, только для особых проверок из существующего результата. Ваш трюк 'whereHas' отлично работает. – Mike

0

Я также использовал предаст в моем приложении (Laravel 4,2) получила логику и переписал его, поскольку это служит моей потребности правильно. Я изменил название Role to Group для лучшего понимания.

Но в вашем случае;

Роли может иметь множество пользователей Роли может иметь множество разрешений

Пользователи принадлежит к ролям

Тогда вы могли бы

$role = Role::where("name", "admin")->first(); 
$role->users()->get(); 

даст вам все пользователи, которые принадлежат к роли администратора ..

Не: Это для laravel 4.2.

Смежные вопросы