2014-09-10 5 views
1

Я новичок в Typo3. Я использую версию 6.1.Typo3, Как я могу получить запрос MySQL, созданный из объекта запроса

Мне нужно отобразить запрос MySQL, сгенерированный из объекта запроса. Пожалуйста, дайте мне знать, как я могу это сделать?

Ниже приведен фрагмент кода, который находится в моем классе репозитория.

$query = $this->createQuery(); 
$query->getQuerySettings()->setRespectStoragePage(false); 
$query->matching(
    $query->equals('id',intval($id)) 
); 

return $query->execute(); 

Мне нужно отобразить запрос MySQL перед выполнением и возвратом результата запроса.

Пожалуйста, дайте мне знать, как я могу это сделать.

Заранее спасибо.

+0

Для целей отладки? – Xatenev

+0

@ Xatenev, да, я хочу проверить, что происходит в моем запросе, поскольку он не отображает ожидаемый результат. –

+0

Возможный дубликат [Extbase - получить созданный sql из запроса] (http://stackoverflow.com/questions/13084863/extbase-get-created-sql-from-query) – biesior

ответ

1

in extbase очень трудно отобразить последний запрос.

вы можете попробовать нормальный TYPO3 путь, но вы должны выполнить запрос, прежде чем вы можете сделать это:

$GLOBALS['TYPO3_DB']->store_lastBuiltQuery = 1; 

//query 

// the complete SQL-Statement 
echo $GLOBALS['TYPO3_DB']->debug_lastBuiltQuery; 

Другим способом идти в buildQuery(array $sql) непосредственно перед return statement и добавить этот фрагмент:

if (in_array("your_table_name", $sql['tables'])) { 
    var_dump($statement); 
    print_r($statement); 
} 

Вы можете найти метод buildQuery здесь:

TYPO3 ver.: 4.x: typo3/sysext/extbase/Classes/Persistence/Storage/Typo3DbBackend.php 
TYPO3 ver.: 6.x: typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php 

Редактировать: Очень хороший метод - просто пропустить имя столбца. Например: Столбец называется test, назовите его testsdffq. Запрос не удастся, и он покажет вам весь запрос.

+0

Я не понимаю, как это реализовать. Не могли бы вы рассказать? –

+0

Хорошо, я попытался реализовать второй способ. Вы хотели реализовать его в основных библиотечных файлах, а затем удалить их после завершения с правом отладки? Это то, что я сделал. –

+0

@KrishDamani Yea точно :). Вы должны положить это в ядро, потому что запрос построен там.Вы должны получить необработанный запрос, прежде чем что-нибудь еще произойдет :). – Xatenev

0

Возможно, это поможет.

Убедитесь, что следующие устанавливается в localconf.php:

$TYPO3_CONF_VARS['SYS']['sqlDebug'] = '1'; 
$TYPO3_CONF_VARS['FE']['debug'] = '1'; 

попробовать

$res = $GLOBALS['TYPO3_DB']->SELECTquery('*', 'tx_xmluploader_xml_import_tree', 'xml_import_id='.$xml_import_id); 
t3lib_div::debug($res); 

Результат будет выводиться из запроса в веб-интерфейсе. Затем вы можете выполнить его в MySQL для отладки.

+0

Как получить значение переменной '$ xml_import_id'? –