是否可以使用Drupal api获取用户列表?

时间:2009-07-25 21:48:39

标签: php drupal

我想获得已分配某个角色的所有用户的列表。我可以编写自己的SQL,但我想尽可能多地使用api。

8 个答案:

答案 0 :(得分:9)

您可以使用entity_load来获取用户数组。以下示例将为管理员用户创建所有电子邮件列表(用于发送通知)

<?php
$users = entity_load('user');
$emails = '';
foreach($users as $user) {
  if (array_key_exists(3, $user->roles)) {
    if (strlen($emails) > 0) {
      $emails .= ' ' . $user->mail;
    } else {
      $emails = $user->mail;
    }
  }
}
?>

答案 1 :(得分:5)

这类任务通常没有Drupal API函数(提取符合特定条件的实体)。它倾向于关注API中的单实体CRUD函数;其他一切都取决于开发人员自己的SQL技能。

“视图”模块允许您构建按角色,权限等过滤的用户列表 - 但它可能很容易过度。

答案 2 :(得分:2)

对我有用的SQL:

$users = "";
$result = db_query('SELECT users.name AS users_name FROM users users
      INNER JOIN users_roles users_roles ON users.uid = users_roles.uid
      WHERE users_roles.rid = 4');

while ($existing_user = db_fetch_object($result)) {
      if ($users != "") $users .= ", ";
      $users .= $existing_user->users_name; // or do whatever
}
echo $users;

请记住这是针对Drupal 6的,我不确定这对大型用户群的性能如何。对Drupal 7不确定。

答案 3 :(得分:1)

一个简单的选项是使用视图为您生成SQL(在按下预览按钮时显示在视图下方),然后使用Drupal SQL abstraction layer获取您需要的结果访问原始数据而不是显示视图。

看起来有点像这样:

$result = db_query('SELECT users.uid AS uid,
   users.mail AS users_mail,
   users.name AS users_name
 FROM users users');
while ($existing_user = db_fetch_object($result)) {
    print_r($existing_user); // or do whatever
  }

只需在视图中添加更多字段即可获得完整查询。

答案 4 :(得分:0)

我不知道任何API可以帮助按角色收集用户。在这里,您可以获得一些链接:http://drupal.org/node/82002。 虽然SO是一项很棒的服务,但我建议在irc.freenode.org上使用drupal.org或#drupal频道来获取与Drupal相关的问题。

Ps。:有时候SQL不是那么邪恶:)

答案 5 :(得分:0)

在Drupal 7中,使用EntityFieldQuery是正确的方法。

答案 6 :(得分:0)

在Drupal 8中,以下工作(在此示例中,加载具有administrator角色的所有用户)

\Drupal::service('entity_type.manager')
  ->getStorage('user')
  ->loadByProperties(['roles' => 'administrator']);

将返回用户实体列表。

要获取uid的列表,请填写实体字段查询:

$query = \Drupal::service('entity_type.manager')->getStorage('user')->getQuery();
$query->condition('roles', 'administrator');
$query->execute();

答案 7 :(得分:0)

在Drupal 8中:

$users = \Drupal\user\Entity\User::loadMultiple();

如果你想得到例如只有管​​理员:

$admins = [];
foreach ($users as $user) {
  if ($user->hasRole('administrator')) {
    $admins[] = $user;
  }
}