Wie erhalte ich Benutzer durch Rolle programmgesteuert

17

In Drupal 8 muss ich allen Benutzern einen Rollennamen geben.

AndrewK
quelle

Antworten:

27

Entschuldigung, beim ersten Mal wurde ein falscher Eigenschaftsname verwendet, eine Antwort:

use  \Drupal\user\Entity\User;

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

dpm($users);
AndrewK
quelle
1
Es sollte beachtet werden, dass 'Moderator' nicht der Name (wie in der Bezeichnung) der Rolle ist, wie die Frage nahelegt, sondern die ID der Rolle.
Plocks
10

Wenn Sie sich in einer Klasse befinden, in der Sie die Abhängigkeitsinjektion oder den Entitätsspeicherhandler verwenden können, können Sie dies auch tun:

$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
quelle
-2

Die richtige Methode besteht darin, den entityTypeManager zum Abrufen des entityStorage-Handles und zum Laden von IDs zu verwenden. Einige Beispiele:

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

quelle
2
Das geht nicht. Hierdurch werden die Benutzer nicht nach Rolle abgerufen, wie bei der angeforderten Frage.
Plocks