Skip to main navigation Zum Hauptinhalt springen Skip to page footer

Extbase Repository: Komplette SQL Anfrage debuggen / ausgeben

Wie kann ich in einem Extbase Repository mit die komplette SQL Anfrage ausgeben lassen, welche an die Datenbank gegeben wird?

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).