• Модуль: 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());
			}
		}
	}
}