Конструктор запросов
Особенности и ограничения
В 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