我想获得所有谁被赋予一定的角色的用户列表。 我可以写我自己的SQL,但我想尽可能多地使用API。
Answer 1:
一般有此类型的任务没有Drupal的API函数(拉起符合某些条件的实体)。 它趋向于集中在API中单一实体CRUD功能; 一切是多达开发者自己的SQL技能。
Views模块允许你通过建立角色,权限等过滤用户的名单 - 但它可以很容易地矫枉过正。
Answer 2:
您可以使用entity_load让用户的阵列。 这里是将创建admin用户的所有邮件列表的样本(用于发送通知)
<?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;
}
}
}
?>
Answer 3:
为我工作的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。
Answer 4:
一个简单的选择是使用次数生成SQL(当你按下预览按钮出现在视图下方自身)为您,然后使用Drupal的SQL抽象层来获得你所需要的结果,如果你需要获得访问原始数据而不是显示的图。
它会看起来有点像这样:
$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
}
只需添加更多的字段到视图,以获得完整的查询。
Answer 5:
在Drupal 8:
$users = \Drupal\user\Entity\User::loadMultiple();
如果你想获得如只有管理员:
$admins = [];
foreach ($users as $user) {
if ($user->hasRole('administrator')) {
$admins[] = $user;
}
}
Answer 6:
我不知道任何API可以帮助角色收集用户。 在这里,你有一些链接,您可以得到的东西: http://drupal.org/node/82002 。 虽然SO是我建议使用drupal.org或#drupal通道irc.freenode.org上为Drupal相关的问题一个真棒服务。
PS:有时SQL是不是邪恶的:)
Answer 7:
在Drupal 7,使用EntityFieldQuery是正确的方式。
Answer 8:
在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();
文章来源: Is it possible to use the Drupal api to get a list of users?