- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/orm/query/query.php
- Класс: BitrixMainORMQueryQuery
- Вызов: Query::ensurePrimarySelect
protected function ensurePrimarySelect()
{
// no auto primary for queries with group
// it may change the result
if ($this->hasAggregation() || $this->hasDistinct())
{
return;
}
$entities = [[$this->entity, '']];
foreach ($this->join_map as $join)
{
$entities[] = [$join['entity'], $join];
}
// check for primaries in select
foreach ($entities as list($entity, $join))
{
/** @var Entity $entity */
foreach ($entity->getPrimaryArray() as $primary)
{
if (!empty($entity->getField($primary)->hasParameter('auto_generated')))
{
continue;
}
$needDefinition = !empty($join['definition']) ? $join['definition'].'.'.$primary : $primary;
$chain = $this->getRegisteredChain($needDefinition, true);
if (empty($this->select_chains[$chain->getAlias()]))
{
// set uniq alias
$alias = $this->getUniqueAlias();
$chain->setCustomAlias($alias);
$this->registerChain('select', $chain);
// remember to delete alias from array result
$this->forcedObjectPrimaryFields[] = $alias;
// set join alias
!empty($join)
? $chain->getLastElement()->setParameter('talias', $join['alias'])
: $chain->getLastElement()->setParameter('talias', $this->getInitAlias());
}
}
}
}