- Модуль: 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'],
)));
}