web-dev-qa-db-ja.com

プログラムで特定の役割を持つオーガニックグループのすべてのユーザーを取得するにはどうすればよいですか?

誰かがグループへの参加をリクエストしたときに、オーガニックグループで特定の役割を持つすべてのユーザーにメールを送信するためのルールを使用しようとしています。

このコードはほとんど機能します。指定された役割($ RID)を持つ特定のグループ($ GID)からすべてのユーザーを返しますが、役割をそのグループに制限しません。つまり、別のグループで適切な役割を持っている場合は、結果に含まれます。

$current_members = db_select('og_membership', 'om');
$current_members->join('og_users_roles', 'ogur', 'om.etid = ogur.uid');
$current_members->condition('om.gid', $GID);
$current_members->condition('om.entity_type', 'user');
$current_members->condition('ogur.rid', $RID); 

$result = $current_members->execute();
while ($res = $result->fetchAssoc()) { $members[] = $res['etid']; }

// Remove duplicate items.
$members = array_keys(array_flip($members));

指定されたグループ内の指定されたロールIDを持つユーザーのみを返すように結果を制限するために何を変更する必要がありますか?

1
sTony

これは単純なSQLクエリであり、結合は必要ありません。

すなわち。 og_users_rolesからuidを選択します。ここで、rid = 3およびgid = 835です。

  $members = array();
  $current_members = db_select('og_users_roles', 'ogur');
  $current_members->fields('ogur', array('uid'));
  $current_members->condition('ogur.rid', $rid);
  $current_members->condition('ogur.gid', $gid);

  $result = $current_members->execute();
  while ($res = $result->fetchAssoc()) { $members[] = $res['uid'];}

  // Remove duplicate items.
  $members = array_keys(array_flip($members));
1
sTony