1С-Битрикс. Получение sql запроса, сформированного методами выборки ORM D7
Чтобы понять причину «неправильно» работающей выборки, нужно посмотреть какой sql-запрос формирует гет-лист. Рассмотрим на примере выборок из ORM ядра D7 в битриксе.
Немного ковыряния в ядре и вуаля.
Собственно код:
use \Bitrix\Main\Application; use \Bitrix\Main\Loader; use \Bitrix\Iblock\SectionTable; if (Loader::includeModule('iblock')) { Application::getConnection()->startTracker(); $catalogSectionsIterator = SectionTable::getList(array( 'select' => array('ID'), 'filter' => array( '=IBLOCK_SECTION_ID' => $arSection['ID'], '=IBLOCK_ID' => $arSection['IBLOCK_ID'] ), )); echo '<pre>', $catalogSectionsIterator->getTrackerQuery()->getSql(), '</pre>'; }
На выходе получим:
SELECT `iblock_section`.`ID` AS `ID` FROM `b_iblock_section` `iblock_section` WHERE `iblock_section`.`IBLOCK_SECTION_ID` = 976 AND `iblock_section`.`IBLOCK_ID` = 146
Обновлено 11.03.2015
Если составляем запрос напрямую, через объект Entity\Query, то всё ещё проще: у него есть метод getLastQuery();
$query = new Bitrix\Main\Entity\Query(Bitrix\Iblock\ElementTable::getEntity()); echo '<pre>', $query->getLastQuery(), '</pre>';
Так же метод dump() для вывода детальной трассировки составленного запроса:
$query = new Bitrix\Main\Entity\Query(Bitrix\Iblock\ElementTable::getEntity()); echo '<pre>', $query->dump(), '</pre>';