Wie erhalte ich Benutzer durch Rolle programmgesteuert


17

In Drupal 8 muss ich allen Benutzern einen Rollennamen geben.

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);

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);

-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]);

2
Das geht nicht. Hierdurch werden die Benutzer nicht nach Rolle abgerufen, wie bei der angeforderten Frage.
Plocks
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.