@sashavol

Как связать данные в битрикс многие-ко-многим с разными типами сущностей Iblock, highload?

Подскажите пожалуйста, насколько сложно сделать следующей запрос:
1) Сущность №1
CCrmQoute - это предложения в битрикс24

2) Сущность №2
Highloadblock - связывающая таблица, содержит ID предложения и ID элемента инфоблока

3) Сущность №3
IblockElement - обычный элемент инфоблока

Существует ли решение которое позволит без циклов сделать запрос, когда к нужному "предложению" я получу все привязанные к нему элементы инфоблока?

Т.е. у меня есть ID предложение например 100 я пишу красивую ORM выборку и по 120 ID я получаю перечень привязанных к нему элементов с их данными и свойствами :))
  • Вопрос задан
  • 969 просмотров
Решения вопроса 1
@PetrPo
Примерно так, если правильно понял

\Bitrix\Main\Loader::includeModule('highloadblock');

use Bitrix\Highloadblock as HL; 
use Bitrix\Main\Entity;

// ID HL-блока
$hlbl = 2;
$hlblock = HL\HighloadBlockTable::getById($hlbl)->fetch(); 

$entity = HL\HighloadBlockTable::compileEntity($hlblock); 
$entity_data_class = $entity->getDataClass(); 

// CRM_QUOTE_ID
$crmQuoteId = 100;
// XML_ID UF поля с CRM_QUOTE_ID в HL-блоке
$crmQuoteFieldId = 'UF_CRM_QUOTE_ID';

$result = $entity_data_class::getList([
	'select' => ['ELEMENT_' => 'IBLOCK_ELEMENT'],
	'order' => [],
	'filter' => [$crmQuoteFieldId => $crmQuoteId],
	'runtime' => [
		'IBLOCK_ELEMENT' => [
			'data_type' => \Bitrix\Iblock\ElementTable::class,
			'reference' => ['this.'.$crmQuoteFieldId => 'ref.ID'],
			'join' => 'RIGHT'
		]
	]
])->fetchAll();

print_r($result);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы