← К заметкам

Заметки

Как вывести SQL запроса ORM для отладки

В D7 можно собрать ORM-запрос и посмотреть SQL до его выполнения. Это удобно, когда фильтр по связи неожиданно меняет число строк.

$query = \Bitrix\Crm\DealTable::query()
    ->setSelect(['ID', 'TITLE'])
    ->setFilter(['>ID' => 100])
    ->setLimit(10);

echo $query->getQuery();

Пример выполняется в административном контексте коробки с подключённым модулем crm. getQuery() возвращает SQL, а не результат выборки; выполнение начинается отдельным вызовом, например exec().

Смотрите JOIN, скобки в условиях и поля сортировки. Если строки дублируются, проверьте связь «один ко многим» до добавления случайного DISTINCT.

SQL может содержать значения фильтра. Не выводите его посетителям страницы и не сохраняйте в доступную из интернета папку логов.