Конструктор запросов

Особенности и ограничения

В REST API Битрикс24 достаточно неплохой механизм для фильтрации данных, но у него есть ряд недостатков:

  • У разных сущностей может отличаться синтаксис или логика работы некоторых операторов

  • При выборке полей у разных сущностей разные значения для выбора всех полей

  • При пагинации большинства сущностей номер страниц должен быть кратен 50, а выбирать можно только по 50 элементов

В нашей реализации решена каждая из этих проблем, но в текущей версии пакета из-за реализации выборки данных ограничена сортировка элементов только по возрастанию первичного ключа (в будущих обновлениях это будет исправлено)

Как строить запросы

Есть два способа строить запросы:

  • Через фасад базы данных (\Illuminate\Support\Facades\DB) - на выходе при выполнении метода получения будут массивы данных в коллекции

$query = DB::table('crm_lead')->select(['ID'])->where('ID', '>=', 17);

$results = $query->get();
  • Через модели Eloquent - на выходе будут модели в Eloquent-коллекции. Этот метод использует больше оперативной памяти, чем предыдущий и может быть незначительно медленнее, но более удобен в большинстве случаев при разработке.

$query = Lead::where('ID', '>=', 17)->select(['ID']);

$models = $query->get();

Разрешённые операторы

Большинство фильтров позволяет самостоятельно указать один из доступных операторов:

Оператор
Описание
По умолчанию
Устарел

“”, like, ilike

LIKE в SQL

=

Равно

Да

<

Меньше

>

Больше

<=

Меньше или равно

>=

Больше или равно

<>, !=

Не равно

При отрицании

!

NOT LIKE в SQL

Да

between, ><

Между

Фильтры

Базовый

$query->where('column', '!=', '2024');
$query->whereNot('column', 'some text');

Год

$query = DB::query()->whereYear('column', '2024');

Между

$query->whereBetween('column', [1, 2]);
$query->whereBetween('column', [new \DateTime(), today()->addDay()]);
$query->whereNotBetween('column', [new \DateTime(), today()->addDay()]);

Null или пустое значение

$query->whereNull('column');
$query->whereNotNull('column');

Одно из значение

$query->whereIn('column', [1, 2]);
$query->whereNotIn('column', [1, 2]);

Полнотекстовый поиск

$query->whereFullText('column', 'some text');

Дата

Фильтр по дате без учёта времени

$query->whereDate('column', now());

Last updated