Jak zdobyć użytkowników programowo według roli

19

W Drupal 8 muszę uzyskać wszystkich użytkowników według podanej nazwy roli.

AndrewK
źródło

Odpowiedzi:

29

Przepraszamy, po raz pierwszy użyłem niewłaściwej nazwy nieruchomości, odpowiedź:

use  \Drupal\user\Entity\User;

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

dpm($users);
AndrewK
źródło
1
Należy zauważyć, że „moderator” nie jest nazwą (jak na etykiecie) roli, jak sugeruje to pytanie, ale w rzeczywistości jest identyfikatorem roli.
plocks
10

Jeśli jesteś w klasie, w której możesz użyć wstrzykiwania zależności lub procedury obsługi pamięci jednostek, możesz to również zrobić:

$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
źródło
-2

Właściwym sposobem jest użycie obiektu entityTypeManager w celu uzyskania uchwytu entityStorage i użycie go do załadowania identyfikatorów. Kilka przykładów:

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

źródło
2
To nie działa Nie uzyskuje to użytkowników według roli, zgodnie z pytaniem.
Plocks