Для того что бы получить прямой MySQL запрос который Bitrix CMS совершает в базу сайта, необходимо перед выполнением запроса через ORM добавить:
1 2 3 |
\Bitrix\Main\Application::getConnection()->startTracker(); |
Затем сделать запрос, к примеру:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$dbQuery = \Mlife\Fraimework\OptBonusUserTable::getlist([ 'filter' => ['=PHONE' => $user_phone], 'limit' => 1, 'select' => [ 'ID', 'PHONE', 'NAME', 'GROUP_ID', 'FUEL_ACTIVE' => 'RACE_INFO.FUEL_ACTIVE', 'CHARGE_OF_FUEL' => 'RACE_INFO.CHARGE_OF_FUEL', 'DISTANCE' => 'RACE_INFO.DISTANCE', 'QUEST_ID' => 'RACE_INFO.QUEST_ID', 'USER_DATE_UPDATE' => 'RACE_INFO.DATE_UPDATE', 'QUANTITY_CHECKPOINT_PRESENT' => 'RACE_INFO.QUANTITY_CHECKPOINT_PRESENT', ], 'order' => ['ID' => 'ASC'], 'cache' => [ 'ttl' => 600, ], 'runtime' => [ new \Bitrix\Main\Entity\ReferenceField( 'RACE_INFO', '\Zixnru\Racingchampions\ChampionsInfoTable', array('=this.GROUP_ID' => 'ref.CODE_CONTRAGENT') ), ], ]); |
и дальше можно поймать и получить прямой запрос MySQL который Bitrix выполняет:
1 2 3 |
echo '<pre>', $dbQuery->getTrackerQuery()->getSql(), '</pre>'; |
В результате этого запроса GetList получим прямой MySQL запрос:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
SELECT `mlife_fraimework_opt_bonus_user`.`ID` AS `ID`, `mlife_fraimework_opt_bonus_user`.`PHONE` AS `PHONE`, `mlife_fraimework_opt_bonus_user`.`NAME` AS `NAME`, `mlife_fraimework_opt_bonus_user`.`GROUP_ID` AS `GROUP_ID`, `mlife_fraimework_opt_bonus_user_race_info`.`FUEL_ACTIVE` AS `FUEL_ACTIVE`, `mlife_fraimework_opt_bonus_user_race_info`.`CHARGE_OF_FUEL` AS `CHARGE_OF_FUEL`, `mlife_fraimework_opt_bonus_user_race_info`.`DISTANCE` AS `DISTANCE`, `mlife_fraimework_opt_bonus_user_race_info`.`QUEST_ID` AS `QUEST_ID`, `mlife_fraimework_opt_bonus_user_race_info`.`DATE_UPDATE` AS `USER_DATE_UPDATE`, `mlife_fraimework_opt_bonus_user_race_info`.`QUANTITY_CHECKPOINT_PRESENT` AS `QUANTITY_CHECKPOINT_PRESENT` FROM `mlife_btoptbonus_user` `mlife_fraimework_opt_bonus_user` LEFT JOIN `innst_race_champions_info` `mlife_fraimework_opt_bonus_user_race_info` ON `mlife_fraimework_opt_bonus_user`.`GROUP_ID` = `mlife_fraimework_opt_bonus_user_race_info`.`CODE_CONTRAGENT` WHERE `mlife_fraimework_opt_bonus_user`.`PHONE` = '9111111111' ORDER BY `ID` ASC LIMIT 0, 1 |
Данный метод удобно использовать при оптимизации запросов или если необходимо сделать рефакторинг кода.