Октябрь 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);
}