• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/orm/fairlimitselector.php
  • Класс: BitrixIblockORMFairLimitSelector
  • Вызов: FairLimitSelector::fetchCollection
static function fetchCollection($query)
{
	$select = $query->getSelect();

	$query->setSelect([new ExpressionField('DISTINCT_ID', 'DISTINCT %s', 'ID')]);
	$query->addGroup('ID');

	// get elements data
	$ids = [];

	foreach ($query->exec()->fetchAll() as $row)
	{
		$ids[] = $row['DISTINCT_ID'];
	}

	/** @var Collection $elements */
	$dataClass = $query->getEntity()->getDataClass();
	$elements = $dataClass::createCollection();

	if (!empty($ids))
	{

		$query = $dataClass::query();

		$query->setSelect($select);

		$query->whereIn('ID', $ids);

		$resultElements = [];

		foreach ($query->fetchCollection() as $elementObject)
		{
			/** @var EntityObject $elementObject */
			$resultElements[$elementObject->getId()] = $elementObject;
		}

		// original sort
		foreach ($ids as $id)
		{
			$elements->sysAddActual($resultElements[$id]);
		}
	}

	return $elements;
}