- Модуль: 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;
}