• Модуль: report
  • Путь к файлу: ~/bitrix/modules/report/lib/visualconstructor/internal/model.php
  • Класс: BitrixReportVisualConstructorInternalModel
  • Вызов: Model::buildOrmSelectForReference
static function buildOrmSelectForReference(array $with)
{
	$select = array();
	$referenceAttributes = static::getMapReferenceAttributes();
	foreach ($with as $referenceKey)
	{
		$testNesting = explode('.', $referenceKey);
		$nestedReferenceAttributes = $referenceAttributes;
		$prefix = '';
		$fromKeyNamePrefix = '';
		foreach ($testNesting as $reference)
		{
			if (!empty($nestedReferenceAttributes[$reference]))
			{
				$prefix = $prefix . $reference . self::ATTRIBUTE_SLICE_DELIMITER;
				switch ($nestedReferenceAttributes[$reference]['type'])
				{
					case Common::ONE_TO_MANY:
						/** @var static $targetEntity */
						$targetEntity = $nestedReferenceAttributes[$reference]['targetEntity'];
						$targetOrmTable = $targetEntity::getTableClassName();
						$fromKeyNamePrefix = !empty($fromKeyNamePrefix) ? $fromKeyNamePrefix . '.' : '';
						$select[$prefix] = $fromKeyNamePrefix.$targetOrmTable::getClassName().':'.mb_strtoupper($nestedReferenceAttributes[$reference]['mappedBy']);
						$fromKeyNamePrefix .= $targetOrmTable::getClassName().':'.mb_strtoupper($nestedReferenceAttributes[$reference]['mappedBy']);
						$nestedReferenceAttributes = $targetEntity::getMapReferenceAttributes();
						break;
					case Common::MANY_TO_MANY:
						$fromKeyName = array_keys($nestedReferenceAttributes[$reference]['join']['column']);
						$fromKeyName = $fromKeyName[0];
						$fromKeyNamePrefix = !empty($fromKeyNamePrefix) ? $fromKeyNamePrefix . '.' : '';
						$toKeyName = array_keys($nestedReferenceAttributes[$reference]['join']['inverseColumn']);
						$toKeyName = $toKeyName[0];
						$select[$prefix] = $fromKeyNamePrefix . $nestedReferenceAttributes[$reference]['join']['tableClassName']
							. ':'
							. $fromKeyName
							. '.'
							. $toKeyName;
						$targetEntity = $nestedReferenceAttributes[$reference]['targetEntity'];
						$nestedReferenceAttributes = $targetEntity::getMapReferenceAttributes();
						break;
					case Common::MANY_TO_ONE:
						$fromKeyNamePrefix = !empty($fromKeyNamePrefix) ? $fromKeyNamePrefix . '.' : '';
						$select[$prefix] = $fromKeyNamePrefix.mb_strtoupper($reference);
						$fromKeyNamePrefix .= mb_strtoupper($reference);
						break;

				}
			}
			else
			{
				throw new ArgumentException("Reference with name:" . $reference . ' not define in reference map');
			}
		}
	}
	return $select;
}