• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/entity_query.php
  • Класс: CEntityQuery
  • Вызов: CEntityQuery::collectExprChains
protected function collectExprChains(CEntityQueryChain $chain, $storages = array('hidden'))
{
	$last_elem = $chain->getLastElement();
	$bf_chains = $last_elem->getValue()->getBuildFromChains();

	$pre_chain = clone $chain;
	//$pre_chain->removeLastElement();

	foreach ($bf_chains as $bf_chain)
	{
		// collect hidden chain
		$tmp_chain = clone $pre_chain;

		// exclude init entity
		$bf_elements = array_slice($bf_chain->getAllElements(), 1);

		// add elements
		foreach ($bf_elements as $bf_element)
		{
			$tmp_chain->addElement($bf_element);
		}

		if (!($bf_chain->getLastElement()->getValue() instanceof CExpressionEntityField))
		{
			foreach ($storages as $storage)
			{
				$reg_chain = $this->registerChain($storage, $tmp_chain);
			}

			// replace "build_from" chain end by registered chain end
			// actually it's better and more correctly to replace the whole chain
			$bf_chain->removeLastElement();
			$bf_chain->addElement($reg_chain->getLastElement());
		}

		// check elements to recursive collect hidden chains
		foreach ($bf_elements as $bf_element)
		{
			if ($bf_element->getValue() instanceof CExpressionEntityField)
			{
				$this->collectExprChains($tmp_chain);
			}
		}
	}
}