T3 Campus T3 Campus

Datenbankabfragen in TYPO3 debuggen

So kannst du Datenbankabfragen von einer Query, sei es über die Repository oder über den QueryBuilder, ausgeben und kontrollieren.

Copy-and-paste Vorlagen

Eine TYPO3 Query ausgeben

$objectManager = GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\ObjectManager::class);
$queryParser = $objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser::class); 
$parameters = $queryParser->convertQueryToDoctrineQueryBuilder($query)->getParameters();
$sql = $queryParser->convertQueryToDoctrineQueryBuilder($query)->getSQL();
    
foreach($parameters as $placeholder => $value)
{
  $sql = preg_replace('/:' . $placeholder . '/', $value, $sql, 1);        
}
        
var_dump($sql);

Ein TYPO3 Statement ausgeben

$statement = $query->getStatement()
$boundVariables = $statement->getBoundVariables();
$completeStatement = $statement->getStatement();
            
foreach($boundVariables as $value)
{
  if (!is_array($value))
  {
    $completeStatement = preg_replace("#\?#", "'" . $value . "'", $completeStatement, 1);
  }else
  {
    $completeStatement = preg_replace("#\?#", "'" . implode(',', $value) . "'", $completeStatement, 1);
   }
}
            
var_dump($completeStatement);

Erläuterungen

Extbase besitzt ein sehr hoher Abstraktionslevel, das heißt man muss sehr selten SQL Anweisungen schreiben. In der Regel nutzt man Klassen. In diesem Fall die Repository oder den QueryBuilder. Dementsprechend weiß man nicht exakt, wie die SQL Anweisung, die letzten Endes abgesetzt wird, aussieht.

Manchmal will man jedoch genau diese Information haben.

Wie können wir also die SQL Anweisung uns ausgeben lassen?

In der Repository konfiguriert man über das Query - Objekt die Datenbankabfrage.

$query = $this->projectRepository->createQuery();
$query->matching(
  $query->logicalAnd(
    $query->equals('name', $name)
  )
);

Um diese SQL Anweisung auszugeben, müssen wir den Typo3DbQueryParser nutzen.

Man kann jedoch auch SQL Anweisungen formulieren. Das geht ebenfalls über das Query - Objekt und der statement - Methode:

$query = $this->projectRepository->createQuery();
$query->statement('SELECT * FROM project WHERE name = ?', [$name]);

Um diese SQL Anweisungen sich vollständig mit Parameter ausgeben zu lassen, kann man sich direkt die SQL Anweisungen mit Platzhaltern und die Parameterliste ausgeben lassen und diese beiden Informationen kombinieren.

Bereit mehr zu lernen?

Dann komme in meine TYPO3 Onlineschule

Als Mitglied des T3 Campus für TYPO3 Schulungen erhältst du eine einzigartige Lernplattform, um professionelle Webseiten mit TYPO3 zu erstellen. Egal, ob du ein Einsteiger, Umsteiger oder bereits erfahren bist – hier findest du die passenden Lernvideos für dich.

Kevin Chileong Lee

Gründer vom T3 Campus, TYPO3 Experte mit 10+ Jahren Erfahrung, TYPO3 Liebhaber.

Ich helfe dir dabei, deine Projekte in TYPO3 umzusetzen.

Insbesondere für TYPO3 Einsteiger biete ich zahlreiche kostenfreie Tutorials und kostenpflichtige Kurse rund um TYPO3 an.
Damit kannst du in wenigen Tagen auch ohne Vorkenntnisse deine erste TYPO3 Webseite erstellen und Erweiterungen programmieren.

Auf meinem YouTube-Kanal findest du viele praktische Beispiele und Videotutorials als auch allgemein Videos zu diversen TYPO3 Themen.

Neber den TYPO3 Tutorials und Kopiervorlagen, schreibe ich auch Artikel auf meinem Blog über diverse Themen und Fragen, die die meisten TYPO3 Einsteiger, haben.

Falls du ein TYPO3 Coaching suchst, dann stehe ich dir in einer 1:1 Trainingssession zur Verfügung.

Wenn du auf dem Laufenden sein möchtest über meine Projekte, dann abonniere den Newsletter.