Extbase Repository: Komplette SQL Anfrage debuggen / ausgeben
Die komplette SQL Anfrage in einem Extbase Repository auszugeben klingt schwierig, ist aber relativ einfach mit einer Funktion zu realisieren:
/**
* @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query
* @return void
*/
private function debugQuery(\TYPO3\CMS\Extbase\Persistence\QueryInterface $query): void
{
$typo3DbQueryParser = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser::class);
$queryBuilder = $typo3DbQueryParser->convertQueryToDoctrineQueryBuilder($query);
$sql = $queryBuilder->getSQL();
$parameters = $queryBuilder->getParameters();
$fullSql = $sql;
foreach ($parameters as $key => $value) {
if (is_string($value)) {
$value = "'" . $value . "'";
}
$fullSql = str_replace(':' . $key, $value, $fullSql);
}
\TYPO3\CMS\Core\Utility\DebugUtility::debug($fullSql,'SQL query:');
}
In einer Funktion in der dann das Query ausgegeben werden soll, kann dann die Funktion mit Übergabe des Query ausgegeben werden:
$this->debugQuery($query);
Dies funktioniert dann z.B. auch in einem Commandline-Skript (CLI).