Раньше чтоб получить, например, список групп пользователя я мог выполнить запрос
$arUser = \Bitrix\Main\UserTable::getList([
'select' => ['ID', 'LOGIN', 'GROUP_LIST'],
'runtime' => [
new \Bitrix\Main\Entity\ReferenceField(
'GROUP_REF',
\Bitrix\Main\UserGroupTable::getEntity(),
[
'=this.ID' => 'ref.USER_ID'
]
),
new \Bitrix\Main\Entity\ExpressionField(
'GROUP_LIST',
'GROUP_CONCAT(DISTINCT %s SEPARATOR "[#]")',
'GROUP_REF.GROUP_ID',
[
'fetch_data_modification' => function () {
return [
function ($val) {
if (empty($val)) {
return [];
}
return explode("[#]", $val);
}
];
}
]
)
]
])->fetch();
и в $arUser['GROUP_LIST'] был список идентификаторов групп.
В парадигме объектов агрегирующие поля запрещены - при fetchObject бросается исключение "Result of query with aggregation could not be fetched as an object". Хотя если в файле bitrix/modules/main/lib/orm/query/result.php в методе initializeFetchObject закомментировать проверку на наличие в запросе агрегирующих полей [if (!empty($this->query->getGroupChains()))] и ExpressionField'у задать тип ArrayField, то в результате fetchObject прекрасно возвращается поле содержащее массив значений.
Идея: разрешить использование агрегирующих полей, либо доработать АПИ так, чтоб можно было получать нечто подобное без лишних запросов.