Middle ORM D7 Обязательно

Выборка и 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 и подзапросы

Материалы

Официальная документация

Проверь себя

Фильтр ['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: он знает документацию и материалы сайта по этой теме.

Знаете материал лучше?

Предложите ссылку: после проверки она появится в этом разделе.

Войти, чтобы предложить
Поделиться в Telegram
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти