Как получить пользователей по ролям программно

19

В Drupal 8 мне нужно получить всех пользователей по названию роли.

AndrewK
источник

Ответы:

29

Извините, впервые использовал неверное имя свойства, ответ:

use  \Drupal\user\Entity\User;

$ids = \Drupal::entityQuery('user')
->condition('status', 1)
->condition('roles', 'moderator')
->execute();
$users = User::loadMultiple($ids);

dpm($users);
AndrewK
источник
1
Следует отметить, что «модератор» - это не название (как на этикетке) роли, как предполагает вопрос, а фактически идентификатор роли.
выходит
10

Если вы находитесь в классе, где вы можете использовать внедрение зависимостей или обработчик хранилища сущностей, вы также можете сделать это:

$user_storage = \Drupal::service('entity_type.manager')->getStorage('user');

$ids = $user_storage->getQuery()
  ->condition('status', 1)
  ->condition('roles', 'moderator')
  ->execute();
$users = $user_storage->loadMultiple($ids);
Иоахим
источник
-2

Надлежащим способом является использование entityTypeManager для получения дескриптора entityStorage и его использования для загрузки идентификаторов. Несколько примеров:

\Drupal::service('entity_type.manager')->getStorage('user')->load($uid);
\Drupal::service('entity_type.manager')->getStorage('user')->loadMultiple([$uid1, $uid2]);

источник
2
Это не работает Сюда не попадают пользователи по ролям, так как вопрос задан.
дается