• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/internals/model.php
  • Класс: BitrixDiskInternalsModel
  • Вызов: Model::getAliasForRef
static function getAliasForRef($ref, $prevConcreteRefModelAlias = '', $prevConcreteRefOrmAlias = '')
{
	$select = array();
	$firstDot = mb_strpos($ref, '.');
	$concreteRef = $ref;
	if($firstDot !== false)
	{
		$concreteRef = mb_substr($ref, 0, $firstDot);
	}

	$conf = static::getReferenceConf($concreteRef);
	if(!$conf)
	{
		throw new SystemException("{$concreteRef} is not defined in getMapReferenceAttributes()");
	}

	if($conf['select'] === '*' || $conf['select'] === array('*'))
	{
		$select[$prevConcreteRefModelAlias . $concreteRef . 'REF_'] = ($prevConcreteRefOrmAlias? $prevConcreteRefOrmAlias . '.' : '') . $conf['orm_alias'];
	}
	elseif(is_array($conf['select']))
	{
		foreach($conf['select'] as $field)
		{
			if(!$field)
			{
				continue;
			}
			$select[$prevConcreteRefModelAlias . $concreteRef . 'REF_' . $field] = ($prevConcreteRefOrmAlias? $prevConcreteRefOrmAlias . '.' : '') . $conf['orm_alias'] . '.' . $field;
		}
		unset($field);
	}

	$aliasData = array();
	if($firstDot)
	{
		/** @var Model $classNextRef */
		$classNextRef = $conf['class'];
		list($selectFromRef, $aliasData) = $classNextRef::getAliasForRef(ltrim(mb_strstr($ref, '.'), '.'), $prevConcreteRefModelAlias . $concreteRef . 'REF_', ltrim($prevConcreteRefOrmAlias . '.' . $conf['orm_alias'], '.'));

		$select = array_merge($select, $selectFromRef);
	}

	return array($select, array(
		$concreteRef . 'REF_' => array(
			'sub' => $aliasData,
			'alias' => array(
				$concreteRef . 'REF_' => $concreteRef,
			),
			'class' => $conf['class'],
	)));
}