作者:亚艾元技术部
Drupal8中只包含不含其它角色用户的用户列表,就是说这些用户只是注册用户,没有分配其它任何角色。经过反复的测试,终于找到可以工作的代码:
我开始用entityQuery尝试了很多次,中间一度放弃,最后找到办法:
$ids = \Drupal::entityQuery('user') ->condition('status', 1) //->exists('roles') ->condition('roles', NULL, 'IS NULL') //只包含普通用户的,已分配角色不包含 //->condition('roles', $other_role_ids,'NOT IN') //用户不包含已有角色的 ->condition('uid', 1, '>') //用户不包含用户1 ->execute();
另一个是我中间先到的办法,使用views,获取列表,使用views构建的sql获取,下面的sql是views生成的:
SELECT users_field_data.uid AS users_field_data_uid, users_field_data.uid AS uid FROM {users_field_data} users_field_data LEFT JOIN {user__roles} user__roles ON users_field_data.uid = user__roles.entity_id AND user__roles.deleted = '0' WHERE (users_field_data.status = '1') AND (user__roles.roles_target_id IS NULL) ORDER BY users_field_data_uid ASC LIMIT 11 OFFSET 0