Стандартный генератор сущностей Битрикс не умеет в множественные поля.
Совсем недавно столкнулся со следующей ситуацией:
- есть HL блок
Documentс множественным полем типа «Текст» - для этого HL блока создана сущность через стандартный генератор сущностей доступный в разделе
Производительность->Таблицы - на выходе получаем описание этого поля в виде
Bitrix\Main\ORM\Fields\TextField
При попытке прочитать значение поля через сущность (DocumentTable) получаем вместо массива значений строку «Array». Создание и обновление значений также не проходит. Как же быть?
Примерно так выглядит описание нашего поля в сущности:
use Bitrix\Main\ORM\Fields\TextField;
use Bitrix\Main\ORM\Data\DataManager;
class DocumentTable extends DataManager
{
// ...
public static function getMap()
{
return [
//...
new TextField(
'DOCUMENT_FILE_KEY',
[
'column_name' => 'UF_DOCUMENT_FILE_KEY',
'title' => Loc::getMessage('DOCUMENT_ENTITY_UF_DOCUMENT_FILE_KEY_FIELD'),
]
),
//...
];
}
// ...
}
Само поле в Битрикс:

Как оказалось, для нормального взаимодействия с этим полем (чтение / создание / обновление) через массив значений на уровне работы с сущностью, достаточно немного изменить описание поля:
use Bitrix\Main\ORM\Fields\ArrayField;
use Bitrix\Main\ORM\Data\DataManager;
class DocumentTable extends DataManager
{
// ...
public static function getMap()
{
return [
//...
(new ArrayField(
'DOCUMENT_FILE_KEY',
[
'column_name' => 'UF_DOCUMENT_FILE_KEY',
'title' => Loc::getMessage('DOCUMENT_ENTITY_UF_DOCUMENT_FILE_KEY_FIELD'),
]
))->configureSerializationPhp(),
//...
];
}
}
Теперь чтение значения множественного поля DOCUMENT_FILE_KEY через сущность DocumentTable возвращает значение поля как массив значений:
$documentObject = DocumentTable::query()
->setSelect([
'ID',
'DOCUMENT_FILE_KEY',
])
->setFilter([
'ID' => 1,
])
->exec()
->fetchObject();
// выводит массив значений поля DOCUMENT_FILE_KEY
print_r($documentObject->get('DOCUMENT_FILE_KEY'));
Создание и обновление также работает корректно (через массив значений):
// Добавляет запись в HL блок
DocumentTable::add(1, [
'DOCUMENT_FILE_KEY' => [
'1',
'2'
],
]);
// Обновляет запись в HL блоке
DocumentTable::update(1, [
'DOCUMENT_FILE_KEY' => [
'3',
'4'
],
]);
Очень жаль, что этот момент в документации к Битрикс как следует не подсвечен.