Документация для разработчиков
Темная тема

find

public static \Bitrix\Sale\Location\Search\Finder::find(
    array $parameters,
    array $behaviour = [
        'FALLBACK_TO_NOINDEX_ON_NOTFOUND' => true,
        'USE_INDEX' => true,
        'USE_ORM' => true,
    ]
);

Статический метод ищет местоположения по параметрам, совместимым с \Bitrix\Sale\Location\LocationTable::getList(). Метод возвращает объект результата, из которого можно получать строки через fetch().

Параметры

Параметр Описание
$parameters Массив параметров поиска.
  • select — поля выборки. Если ключ не передан, метод выбирает ID.
  • filter — фильтр поиска. Для специальных фильтров используйте ключи PHRASE, SITE_ID, NAME.LANGUAGE_ID и поля из \Bitrix\Sale\Location\LocationTable.
  • order — сортировка. При поиске без индекса код отдельно обрабатывает сортировку по NAME.NAME. Если сортировка не передана, метод использует внутренний порядок по выбранным полям.
  • limit — максимальное количество строк. Значение должно быть неотрицательным целым числом.
  • offset — смещение выборки. Значение должно быть неотрицательным целым числом.
$behaviour Настройки поведения поиска.
  • FALLBACK_TO_NOINDEX_ON_NOTFOUND — если значение true, метод повторяет поиск без индекса, когда индекс не вернул строки. По умолчанию true.
  • USE_INDEX — если значение true, метод может использовать поисковый индекс. По умолчанию true.
  • USE_ORM — если значение true, метод передает простой поиск без PHRASE и SITE_ID в LocationTable::getList(). Если значение false, метод использует SQL-поиск Finder. По умолчанию true.

Возвращаемое значение

Возвращает объект результата, из которого можно получать строки методом fetch().

В зависимости от сценария метод может вернуть:

  • \Bitrix\Main\DB\Result,
  • \Bitrix\Main\DB\ArrayResult,
  • результат \Bitrix\Sale\Location\LocationTable::getList().

Как работает

Метод проверяет параметры поиска и добавляет select => ['ID'], если выборка не передана.

Если в фильтре есть PHRASE, =PHRASE, SITE_ID или =SITE_ID, метод использует поисковый механизм Finder. Такой же механизм применяется, если в поведении задано 'USE_ORM' => false.

Если специальных фильтров нет и ORM не отключен, метод передает параметры в \Bitrix\Sale\Location\LocationTable::getList().

Поиск через индекс

Метод использует индекс, если индекс помечен как актуальный и в поведении задано 'USE_INDEX' => true. Актуальность индекса проверяет Finder::checkIndexValid().

При поиске по индексу метод поддерживает:

  • фильтр по PHRASE или =PHRASE,
  • фильтр по SITE_ID или =SITE_ID,
  • выборку и фильтр по простым полям \Bitrix\Sale\Location\LocationTable,
  • выборку и фильтр по NAME.NAME и NAME.LANGUAGE_ID,
  • limit и offset.

Если индекс не вернул строки и в поведении задано 'FALLBACK_TO_NOINDEX_ON_NOTFOUND' => true, метод повторяет поиск без индекса.

Поиск без индекса

Без индекса метод строит SQL-запрос к таблицам местоположений, названий, типов и привязок к сайтам.

В этом режиме поддерживаются фильтры:

  • PHRASE или =PHRASE — начало названия местоположения,
  • SITE_ID или =SITE_ID — идентификатор сайта,
  • ID или =ID — идентификатор местоположения или массив идентификаторов,
  • CODE или =CODE — код местоположения, при поиске без индекса код обрабатывается как числовое значение,
  • COUNTRY_ID или =COUNTRY_ID — идентификатор страны,
  • PARENT_ID или =PARENT_ID — идентификатор родительского местоположения,
  • TYPE_ID или =TYPE_ID — идентификатор типа местоположения,
  • NAME.LANGUAGE_ID или =NAME.LANGUAGE_ID — язык названия.

Если язык названия не передан, метод использует константу LANGUAGE_ID.

Исключения

Метод может выбросить исключение при некорректных параметрах:

  • $parameters должен быть массивом,
  • $parameters['select'] и $parameters['filter'] должны быть массивами,
  • PHRASE, SITE_ID и их варианты с оператором = должны быть строками,
  • limit и offset должны быть неотрицательными целыми числами,
  • при поиске через механизм Finder в фильтре поддерживается только оператор =.

Примеры

Перед использованием примеров подключите модуль sale:

if (!\Bitrix\Main\Loader::includeModule('sale'))
{
    throw new \RuntimeException('Модуль sale не подключен');
}

Найти местоположения по началу названия:

$result = Bitrix\Sale\Location\Search\Finder::find([
    'select' => [
        'ID',
        'CODE',
        'NAME' => 'NAME.NAME',
    ],
    'filter' => [
        '=PHRASE' => 'Москва',
        '=NAME.LANGUAGE_ID' => LANGUAGE_ID,
    ],
    'limit' => 10,
]);

while ($location = $result->fetch())
{
    echo $location['ID'] . ': ' . $location['NAME'] . PHP_EOL;
}

Найти только города:

$typeResult = \Bitrix\Sale\Location\TypeTable::getList([
    'select' => [
        'ID',
    ],
    'filter' => [
        '=CODE' => 'CITY',
    ],
    'limit' => 1,
]);

$cityType = $typeResult->fetch();

if (!$cityType)
{
    throw new \RuntimeException('Тип местоположения CITY не найден');
}

$result = \Bitrix\Sale\Location\Search\Finder::find([
    'select' => [
        'ID',
        'CODE',
        'NAME' => 'NAME.NAME',
    ],
    'filter' => [
        '=PHRASE' => 'Москва',
        '=TYPE_ID' => (int)$cityType['ID'],
        '=NAME.LANGUAGE_ID' => LANGUAGE_ID,
    ],
    'limit' => 10,
]);

while ($location = $result->fetch())
{
    echo $location['ID'] . ': ' . $location['NAME'] . PHP_EOL;
}

Выполнить поиск без индекса и ORM:

$result = Bitrix\Sale\Location\Search\Finder::find(
    [
        'select' => [
            'ID',
            'CODE',
            'NAME' => 'NAME.NAME',
        ],
        'filter' => [
            '=PHRASE' => 'Санкт-Петербург',
            '=NAME.LANGUAGE_ID' => 'ru',
        ],
        'limit' => 5,
    ],
    [
        'USE_INDEX' => false,
        'USE_ORM' => false,
    ]
);

while ($location = $result->fetch())
{
    echo $location['ID'] . ': ' . $location['NAME'] . PHP_EOL;
}

Особенности

Символ % удаляется из значения PHRASE перед поиском.

Если передан SITE_ID, но для сайта не используются привязки местоположений, метод удаляет этот фильтр перед поиском.

Методы \Bitrix\Sale\Location\LocationTable::addExtended(), updateExtended() и deleteExtended() помечают индекс поиска как неактуальный после успешного изменения данных местоположений.

Метод \Bitrix\Sale\Location\LocationTable::getListFast() устарел и вызывает Finder::find() с отключенными индексом и ORM.

Была ли эта страница полезна?

Пользовательские комментарии

Помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2026, «1С-Битрикс», 2026
Наверх