Битрикс ORM — ManyToMany связь двух HLBlock сущностей


Вводные данные — две ХЛ блочные сущности
(названия менять не буду — лень, оставлю как есть в проекте)

«Очереди» RECEIPTQUEUE (таблица receipt_queue) и календари RECEIPTCALENDAR (таблица receipt_calendar)

в очередях я создал поле UF_RECEIPT_CALENDAR типа «Связь с элементами ХЛ блока» множественное

ORM классы таблиц уже созданы с помощью генератора

Далее вооружившись документацией идём настраивать множественную связь

Первое и пожалуй самое главное — после создания множественной связи в БД для связи N:M автоматически создалась табличка receipt_queue_uf_receipt_calendar — Вам её нужно будет найти
структура полей у неё ID, VALUE

Второе и не менее важное — в ORM связи нужно сконфигурировать эти поля.

В итоге получились такие связи

'RECEIPT_QUEUE' => (new ManyToMany(
'RECEIPT_QUEUE',
ReceiptQueueTable::class
))->configureTableName('receipt_queue_uf_receipt_calendar')
->configureLocalPrimary('ID', 'VALUE')
->configureRemotePrimary('ID', 'ID')

'RECEIPT_CALENDAR' => (new ManyToMany(
'RECEIPT_CALENDAR',
ReceiptCalendarTable::class
))->configureTableName('receipt_queue_uf_receipt_calendar')
->configureLocalPrimary('ID', 'ID')
->configureRemotePrimary('ID', 'VALUE')

Далее всё «взлетело» — getlist-ом получаем нужные очереди, далее геттер возвращает коллекцию объектов календарей.

ИМХО всё это довольно не тривиально …
По крайней мере я после доки не смог правильно описать связь, саппорт помог — и то почти 2 недели общались по этому вопросу.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *