Выборка и Query: фильтры, runtime-поля, подзапросы
Запросы к базе формируются статическим методом getList() либо через построитель query(), где без указания оператора в фильтре по строкам по умолчанию применяется оператор LIKE. Построитель поддерживает добавление runtime-полей, группировок и кеширование выборок, а итоговый скомпилированный SQL можно проверить методом Query::getQuery().
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Фильтрация
-
2
Сортировка
-
3
Группировка
-
4
Пагинация
-
5
Query Builder
-
6
Сложные условия
-
7
Runtime-поля
-
8
\Bitrix\Main\Entity\Query
-
9
SELECT, WHERE, ORDER, LIMIT
-
10
JOIN и подзапросы
Материалы
Официальная документация
-
Построитель запросов Новая дока
-
Постраничная навигация Новая дока
Материалы BXMax
Проверь себя
Фильтр ['CODE' => 'news'] в getList() вернул и news, и news-archive. Почему?
Без оператора в ключе ORM применяет LIKE с подстрокой. Точное равенство — '=CODE'. В query()->where('CODE', 'news') оператор равенства подставляется сам.
Заказчик жалуется, что список стал медленным после включения постраничной навигации. Что изменилось в запросе?
count_total => true или countTotal(true) добавляет отдельный SELECT COUNT по тому же фильтру. На большой таблице это второй тяжёлый запрос на каждый хит; документация по навигации описывает режим без COUNT, а для списков без счётчика страниц лучше setLimit(n+1).
Добавили runtime-поле CNT с COUNT(*) и фильтр '>CNT' => 5, group не указывали. Что сделает ORM?
Сама сгруппирует по остальным выбранным полям и перенесёт условие по агрегату в HAVING. Это удобно, пока вы знаете, что произошло: явный group спасает от неожиданных группировок при добавлении поля в select.
Как увидеть SQL, который ORM собрала из ваших условий, не выполняя его?
Query::getQuery() возвращает текст запроса без выполнения, Query::getLastQuery() — последний выполненный. Для запросов внутри компонентов — SQL-трекер на странице производительности.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить