Блог Горошко Андрея 1C-Битрикс,PHP,Разработка Postroitel Zaprosov: Руководство разработчика

Postroitel Zaprosov: Руководство разработчика

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Postroitel Zaprosov: Руководство разработчика». Мы подготовили подробный разбор принципов работы и развернутые примеры интеграции.

—
title: Построитель запросов
—

Методы выборки getList и getRow сразу выполняют запросы и возвращают результаты. Они подходят для простых запросов, но неудобны, если параметры неизвестны заранее или нужна сложная логика.

Гибкость с Entity\\Query. Для гибкой настройки запросов используйте объект Entity\Query(далее — Query). Он накапливает параметры для запроса. Это полезно, когда параметры неизвестны заранее и формируются программно.

Пример с getList

// получение данных через getList
$result = BookTable::getList([
    'select' => ['ISBN', 'TITLE', 'PUBLISH_DATE'],
    'filter' => ['=ID' => 1]
]);

Пример с Entity\Query

// аналогичный запрос через Entity\Query
$q = new Entity\Query(BookTable::getEntity());
$q->setSelect(['ISBN', 'TITLE', 'PUBLISH_DATE']);
$q->setFilter(['=ID' => 1]);
$result = $q->exec();

Объект Query — ключевой элемент для выборки данных и используется внутри getList. Однако переопределение методов getList может быть ограничено: метод может сработать при вызове, но не через Query.

Постепенное добавление параметров

Если вы не знаете заранее, какие поля выбрать или какие фильтры применить, используйте объект Query для постепенного добавления параметров.

$query = new Entity\Query(BookTable::getEntity());
attachSelect($query);
attachOthers($query);
$result = $query->exec();

// Функция для добавления полей в запрос
function attachSelect(Entity\Query $query): void
{
    $query->addSelect('ID');
    
    // Условие для добавления поля ISBN
    if (/* условие */) {
        $query->addSelect('ISBN');
    }
}

function attachOthers(Entity\Query $query): void
{
    // Условие для добавления фильтра
    if (/* условие */) {
        $query->setFilter(/* параметры фильтра */);
    }
    
    // Условие для добавления сортировки
    if (/* условие */) {
        $query->setOrder(/* параметры сортировки */);
    }
}

Создание объекта Query. Используем new Entity\Query(BookTable::getEntity()) для создания нового объекта Query, связанного с сущностью BookTable. Это будет основой для построения запроса.

Добавление полей в запрос. Функция attachSelect добавляет поля, которые нужно выбрать из базы данных.

  • addSelect('ID') добавляет поле ID в список выбираемых полей
  • Условие внутри функции добавляет поле ISBN, если оно необходимо

Добавление фильтров и сортировки. Функция attachOthers добавляет фильтры и сортировку.

  • setFilter устанавливает условия фильтрации данных
  • setOrder задает порядок сортировки результатов

Запрос без выполнения

Объект Query позволяет строить запрос без его выполнения. Это полезно для подзапросов или получения текста запроса:

$q = new Entity\Query(BookTable::getEntity());
$q->setSelect(['ID']);
$q->setFilter(['=PUBLISH_DATE' => new Type\Date('2014-12-13', 'Y-m-d')]);
$sql = $q->getQuery();
file_put_contents('/tmp/today_books.sql', $sql);
// Запрос "SELECT ID FROM my_book WHERE PUBLISH_DATE='2014-12-31'" будет сохранен в файл, но не выполнен.

Методы Entity\\Query

select, group

  • setSelect, setGroup — задает список полей, полностью заменяя предыдущие
  • addSelect, addGroup — добавляет новые поля к существующему списку
  • getSelect, getGroup — возвращает массив полей

filter

  • setFilter — устанавливает фильтр
  • addFilter — добавляет параметр фильтра
  • getFilter — возвращает фильтр

order

  • setOrder — устанавливает порядок сортировки
  • addOrder — добавляет поле для сортировки
  • getOrder — возвращает порядок сортировки

limit/offset

  • setLimit, setOffset — устанавливает значение
  • getLimit, getOffset — возвращает значение

runtime fields

  • registerRuntimeField — регистрирует временное поле

💡 Экспертное мнение и рекомендации

Ключевые выводы по теме «Postroitel Zaprosov: Руководство разработчика»:

Использование современных стандартов D7 при работе с запросов позволяет писать чистый, масштабируемый и безопасный код. Не забывайте обрабатывать исключения (try/catch) и проверять права доступа текущего пользователя перед выполнением критических операций.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Как использовать метод SDK crm.contact.details.configuration.get в Битрикс24Как использовать метод SDK crm.contact.details.configuration.get в Битрикс24

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Как использовать метод SDK crm.contact.details.configuration.get в Битрикс24», проанализируем

Получить поля для связи сделка-контакт crm.deal.contact.fieldsПолучить поля для связи сделка-контакт crm.deal.contact.fields

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Получить поля для связи сделка-контакт crm.deal.contact.fields». Мы подготовили подробный разбор принципов работы и развернутые примеры

Кастомный поиск: Индексация своих данных через событие OnReindexКастомный поиск: Индексация своих данных через событие OnReindex

Модуль поиска в Битрикс автоматически индексирует инфоблоки, форумы и статические файлы. Но что, если у вас есть данные в своей таблице или динамически генерируемые страницы, которые тоже нужно искать? Для