作者:亚艾元技术部
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

