Comment obtenir des utilisateurs par rôle par programme

19

Dans Drupal 8, je dois obtenir tous les utilisateurs par nom de rôle donné.

AndrewK
la source

Réponses:

29

Désolé, j'ai utilisé un nom de propriété incorrect pour la première fois, une réponse:

use  \Drupal\user\Entity\User;

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

dpm($users);
AndrewK
la source
1
Il convient de noter que «modérateur» n'est pas le nom (comme dans l'étiquette) du rôle, comme le suggère la question, mais en fait l'ID du rôle.
plocks
10

Si vous êtes dans une classe où vous pouvez utiliser l'injection de dépendances ou le gestionnaire de stockage d'entités, vous pouvez également procéder comme suit:

$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);
joachim
la source
-2

La bonne façon consiste à utiliser entityTypeManager pour obtenir le descripteur entityStorage et à l'utiliser pour charger les identifiants. Quelques exemples:

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

la source
2
Ça ne marche pas. Cela n'obtient pas les utilisateurs par rôle, comme la question demandée.
plocks