Skip to content

Множественное сохранение элементов highload-блоков. Отсутствуют записи в табличах множественных значений #40

@ave404

Description

@ave404

При работе с ORM иногда приходится добавлять множество записей в одну транзакцию, поэтому используем конструкции вида

$collection = MacroregionTable::createCollection();
foreach ($items as $item) {
    $collection->add($item);
}
$collection->save(true);

// или

MacroregionTable::addMulti($items, true);

Когда сущность обычная и наследуется от Bitrix\Main\ORM\Data\DataManager все проходит корректно. Но когда сущность является описанием Highload-блока, то её родитель Bitrix\Highloadblock\DataManager, которому при сохранение трубеются дополнительные действия. Поэтому некоторые методы вроде add и update в нем переопределены, а вот метод addMulti не переопределен и сохранение происходит некорректно. Отсутствуют записи в таблицах множественных значений!

То есть значения множественных полей сериализовались, но не внеслись в отдельную таблицу этого поля

Основаня таблица с корректными сериализованными значениями
Основаня таблица с корректными сериализованными значениями
Дополнительная таблица множественного поля без данных

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions