2017-01-09 2 views
1

У меня есть модель пользователя с поворотным столом role_user.Laravel eloquent model model with pivot

В моей таблице пользователя у меня есть поле 'active'.

И пользователь может иметь несколько ролей, которые сохраняются в сводной таблице.

Как я могу вытащить всех пользователей, где active = 1, и где пользователь имеет определенную роль в сводной таблице?

ответ

3

Попробуйте это. Это предполагает, что у вас есть красноречивые отношения между пользователями и ролями. Я использовал этот тип запросов только в отношениях hasMany/belongsTo, но я думаю, что он будет работать и в вашем примере.

$users = User::where('active', 1)->whereHas('roles', function ($query) { 
    $query->where('role', 'foo'); 
})->get(); 
+0

поблагодарить вас за ваши ответы, @ jackel414 имеет немного более чистый код и он работает, но оба ответ хорош! – lewis4u

3

Для фильтрации пользователей с помощью роли whereHas() метода:

User::whereHas('roles', function($q) use ($role) { 
    $q->where('role', $role); 
})->where('active', 1)->get(); 
+0

Является ли 'wherePivot' в этом случае фильтром для активных ролей или пользователей? Я думаю, что это может быть фильтрация для активных ролей, но OP ищет активных пользователей. Если это фильтрует таблицу пользователя на основе активного, это более чистая реализация, чем мой ответ. – jackel414

+0

@ jackel414 Я был уверен, что 'активный' столбец находится в сводной таблице. Я исправил код. Спасибо, что упомянули об этом.) Я подтвердил ваш ответ. –

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