• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/orm/query/query.php
  • Класс: Bitrix\Main\ORM\Query\Query
  • Вызов: Query::buildOrder
protected function buildOrder()
{
	$sql = array();

	foreach ($this->order_chains as $chain)
	{
		$sort = isset($this->order[$chain->getDefinition()])
			? $this->order[$chain->getDefinition()]
			: ($this->order[$chain->getAlias()] ?? '');

		$connection = $this->entity->getConnection();

		// define value field
		$valueField = $chain->getLastElement()->getValue();
		if ($valueField instanceof ExpressionField)
		{
			$valueField = $valueField->getValueField();
		}

		// get final sql definition
		if (isset($this->select_chains[$chain->getAlias()]))
		{
			// optimization for fields that are in select already
			$sqlDefinition = $connection->getSqlHelper()->quote($chain->getAlias());
		}
		else
		{
			$sqlDefinition = $chain->getSqlDefinition();
		}

		if (($connection instanceof Main\DB\OracleConnection || $connection instanceof Main\DB\MssqlConnection)
			&& $valueField instanceof TextField)
		{
			// softTextCast
			$sqlDefinition = $connection->getSqlHelper()->softCastTextToChar($sqlDefinition);
		}

		$sql[] = $sqlDefinition. ' ' . $sort;
	}

	return join(', ', $sql);
}