2009-07-25 99 views

回答

5

一般有對這類任務不Drupal的API函數(拉起符合某些條件的實體)。它傾向於關注API中的單實體CRUD功能;其他一切都取決於開發人員自己的SQL技能。

Views模塊允許您建立按角色,權限等過濾的用戶列表 - 但它可能很容易被過度殺傷。

+0

我會做我自己的答案,但我覺得我應該擴大這一點。沒有函數可以讓你在Drupal(核心至少)中列出用戶並按角色過濾。您可以編寫自己的函數或像eaton說的那樣,使用views來創建用戶列表。 – codeincarnate 2009-07-26 03:59:12

+0

這裏的意見很簡單。 – 2009-07-26 09:16:18

+0

你__really__應該使用視圖。這是您正在尋找的解決方案。 – alexanderpas 2009-07-30 14:26:17

0

我不知道任何API可以幫助按角色收集用戶。在這裏你可以得到一些鏈接:http://drupal.org/node/82002。 儘管SO是一項非常棒的服務,但我建議在irc.freenode.org上使用drupal.org或#drupal頻道獲取Drupal相關問題。

詩:有時SQL是不是邪惡的:)

+0

我同意。我看到很多直接查詢數據庫而不是使用預定義函數的Wordpress插件。 – 2009-07-25 22:08:52

+4

只是評論添加StackOverflow非常適合Drupal的問題,更多的人應該在這裏問問他們。 – alxp 2009-07-26 17:23:59

+0

應該避免sql查詢,因爲drupal7將使用新的數據庫API爲了抽象SQL(所以你可以使用像mongodb :) – 2009-12-06 05:27:46

1

一個簡單的選擇是使用視圖爲您生成SQL(在按下預覽按鈕時顯示其自身的下方),然後使用Drupal SQL abstraction layer獲得您需要的結果,如果您需要訪問原始數據而不是顯示一個View。

它會看起來有點像這樣:

$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 
    } 

只需添加更多的字段到視圖,以獲得完整的查詢。

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.

9

您可以使用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; 
    } 
    } 
} 
?> 
0

在Drupal 7的,使用EntityFieldQuery是正確的方式。

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

在Drupal的8:

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

如果你想獲得如只有管​​理員:

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