• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/search/result/provider/indexsupportedprovider.php
  • Класс: Bitrix\Crm\Search\Result\Provider\IndexSupportedProvider
  • Вызов: IndexSupportedProvider::searchInRequisites
protected function searchInRequisites(string $searchQuery, int $limit = 0, array $excludedIds = []): array
{
	$result = [];

	$minSearchQueryLength = 5;
	if (mb_strlen($searchQuery) < $minSearchQueryLength)
	{
		return $result;
	}

	$entityRequisiteMap = EntityRequisite::getDuplicateCriterionFieldsMap();
	$countryId = EntityPreset::getCurrentCountryId();

	$requisiteFields = $entityRequisiteMap[$countryId] ?? [];

	if (empty($requisiteFields))
	{
		return $result;
	}

	$permissionSql = $this->getPermissionSql();
	if ($permissionSql === false) // access denied
	{
		return $result;
	}

	$query = RequisiteTable::query();
	$query->setSelect(['ENTITY_ID']);
	$query->setGroup('ENTITY_ID');
	$query->setLimit($limit);
	$query->where('ENTITY_TYPE_ID', $this->getEntityTypeId());
	if (!empty($excludedIds))
	{
		$query->whereNotIn('ENTITY_ID', $excludedIds);
	}

	$requisiteFieldsFilter = Query::filter();
	$requisiteFieldsFilter->logic('or');
	foreach ($requisiteFields as $field)
	{
		$requisiteFieldsFilter->whereLike(
			$field,
			$searchQuery . '%'
		);
	}
	$query->where($requisiteFieldsFilter);

	$query->registerRuntimeField(
		'',
		new ReferenceField(
			'ENTITY',
			$this->getEntityTableQuery()->getEntity(),
			[
				'=this.ENTITY_ID' => 'ref.ID',
			],
			['join_type' => 'INNER']
		)
	);
	if ($permissionSql !== '')
	{
		$query->addFilter('@ENTITY.ID', new SqlExpression($permissionSql));
	}

	$items = $query->exec();
	while ($item = $items->fetch())
	{
		$result[] = $item['ENTITY_ID'];
	}

	return $result;
}