Получение привязок пользователей к группам

Октябрь 10, 2017

Теги: ORM, Пользователи

Класс \Bitrix\Main\UserGroupTable можно использовать как для выборки всех групп пользователя, так и для выборки всех пользователей группы. Т.к. ORM позволяет выбрать любые поля как пользователя, так и группы, то дополнительных запросов не потребуется.

Выбираем все активные группы текущего пользователя:


$result = \Bitrix\Main\UserGroupTable::getList(array(

    
'filter' => array('USER_ID'=>$GLOBALS["USER"]->GetID(),'GROUP.ACTIVE'=>'Y'),
    
'select' => array('GROUP_ID','GROUP_CODE'=>'GROUP.STRING_ID'), // выбираем идентификатор группы и символьный код группы
    
'order' => array('GROUP.C_SORT'=>'ASC'), // сортируем в соответствии с сортировкой групп
));

while (
$arGroup $result->fetch()) {
    
print_r($arGroup);
}

Выбираем всех активных пользователей группы:


$result = \Bitrix\Main\UserGroupTable::getList(array(

    
'filter' => array('GROUP_ID'=>12,'USER.ACTIVE'=>'Y'),
    
'select' => array('USER_ID','NAME'=>'USER.NAME','LAST_NAME'=>'USER.LAST_NAME'), // выбираем идентификатор п-ля, имя и фамилию
    
'order' => array('USER.ID'=>'DESC'), // сортируем по идентификатору пользователя
));

while (
$arGroup $result->fetch()) 
{
    
print_r($arGroup);
}

Также можно выбирать активные группы пользователя и с помощью \Bitrix\Main\GroupTable (этот вариант навеян исходным кодом функции UserTable::getUserGroupIds, кстати, интересный пример использования возможностей ORM). Этот код учитывает временные рамки нахождения пользователя в группе.


$nowTimeExpression = new \Bitrix\Main\DB\SqlExpression(

    \
Bitrix\Main\UserTable::getEntity()->getConnection()->getSqlHelper()->getCurrentDateTimeFunction()
);

$result = \Bitrix\Main\GroupTable::getList(array(
    
'select' => array('ID','STRING_ID'),
    
'filter' => array(
        
'=UserGroup:GROUP.USER_ID' => $GLOBALS["USER"]->GetID(),
        
'=ACTIVE' => 'Y',
        array(
            
'LOGIC' => 'OR',
            
'=UserGroup:GROUP.DATE_ACTIVE_FROM' => null,
            
'<=UserGroup:GROUP.DATE_ACTIVE_FROM' => $nowTimeExpression,
        ),
        array(
            
'LOGIC' => 'OR',
            
'=UserGroup:GROUP.DATE_ACTIVE_TO' => null,
            
'>=UserGroup:GROUP.DATE_ACTIVE_TO' => $nowTimeExpression,
        ),
        array(
            
'LOGIC' => 'OR',
            
'!=ANONYMOUS' => 'Y',
            
'=ANONYMOUS' => null
        
)
    )
));

while(
$arGroup=$result->fetch())
{
    
print_r($arGroup);
}

См. также:

← Переход к списку