• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/orm/query/query.php
  • Класс: Bitrix\Main\ORM\Query\Query
  • Вызов: Query::rewriteDataDoubling
protected function rewriteDataDoubling(Filter $filter, $section)
{
	foreach ($filter->getConditions() as $condition)
	{
		if ($condition instanceof Filter)
		{
			//subfilter
			$this->rewriteDataDoubling($condition, $section);
		}
		elseif ($condition->getDefinition() !== null)
		{
			// regular condition
			$chain = $this->filter_chains[$condition->getDefinition()];

			if ($chain->forcesDataDoublingOff() || ($this->data_doubling_off && $chain->hasBackReference()))
			{
				$primaryName = $this->entity->getPrimary();
				$uniquePostfix = '_TMP'.rand();

				// build subquery
				$dataClass = $this->entity->getDataClass();

				$subQuery = $dataClass::query()
					->addSelect($primaryName)
					->where(clone $condition)
					->setTableAliasPostfix(strtolower($uniquePostfix));

				// change condition
				$condition->setColumn($primaryName);
				$condition->setOperator('in');
				$condition->setValue($subQuery);

				// register primary's chain
				$idChain = $this->getRegisteredChain($primaryName);
				$this->registerChain($section, $idChain, $primaryName);
			}
		}
	}
}