我想获得已分配某个角色的所有用户的列表。我可以编写自己的SQL,但我想尽可能多地使用api。
答案 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;
}
}