Extbase - erstellt sql-Abfrage
möchte ich, um einige Datenbank-Tabellen aus meinem typo3-extensions.
Die Extension basiert auf extbase.
Die Abfrage nichts zurückgibt aber die Daten vorhanden sind
Habe ich versucht, dieses:
$query = $this->createQuery();
$query->statement('SELECT * FROM `my_table`
WHERE field = ? ORDER BY date DESC LIMIT 1',
array($condition));
$results = $query->execute();
und so:
$query = $this->createQuery();
$query->matching($query->equals('field', $condition));
$query->setOrderings(array('date' => Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING));
$query->setLimit(1);
$results = $query->execute();
beide gibt null als Ergebnis.
Ist es möglich, den sql-Code der Klasse erstellt, um zu schauen, wo der Fehler ist?
Ist, habe ich mich in einigen extbase persistenten Klassen aber nicht finden, einen Anhaltspunkt
BEARBEITEN:
Für diejenigen, die interessiert sind.. fand ich eine "Lösung".
Wenn Sie die Abfrage erstellen mit der statement () - Methode, können Sie drucken Sie die Abfrage mit dieser Funktion
echo $query->getStatement()->getStatement();
Nicht ersetzen der Platzhalter.
Aber man kann die Variablen mit dieser Methode
var_dump($query->getStatement()->getBoundVariables());
Das ist die beste Lösung, die ich gefunden habe, ohne Bearbeitung der extbase Durchwahlnummern
- Sie können auch mithilfe von Zend Server Z-Ray" sammelt alle Datenbank-quries automatisch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen dieses snippet, obwohl es nicht sehr komfortabel in der Anwendung, es hilft viel:
im Allgemeinen brauchen Sie diesen code am Ende der
buildQuery(array $sql)
- Methode (*) - rechts vorreturn $statement;
(*) Klasse Datei:
typo3/sysext/extbase/Classes/Persistence/Storage/Typo3DbBackend.php
typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php
In 6.2.x ...
Können Sie versuchen, innerhalb
\TYPO3\CMS\Core\Database\DatabaseConnection::exec_SELECTquery
Methode, fügen Sie einfach den Zustand nach dem abholen der $Abfrage, wie (trim ist wichtig!):buildQuery
Methode 6.2In TYPO3 6.2 können Sie Extbase DebuggerUtility zu debug die Abfrage.
Fügen Sie diesen code vor $query->execute():
Einfache Weise, ohne dass änderungen am Typo3 core code und nicht erwähnt, in jedem forum, so weit ist es mit Hilfe der php "serialize ()" - Methode:
In der Ergebnis-Objekt finden Sie die SQL-Abfrage ("Anweisung;" ...)
Verbesserung biesiors Antwort:
Als Extbase ersetzt einige Platzhalter, die nach dem Aufruf der buildQuery(), bevorzugen Sie vielleicht den Ort der debug-Ausgabe in
getObjectDataByQuery()
nur nach $this->replacePlaceholders($sql, $Parameter, $tableName);Auch, eine bessere Nutzung debug() anstelle von var_dump().
[Datei:
typo3\sysext\extbase\Classes\Persistence\Generic\Storage\Typo3DbBackend.php
. Linie 339 in der version 6.1]:Für die Ausführung der Abfrage, die Sie haben, um zu schreiben 'setReturnQueryResult' auf Ihrem repository
Ich soeben erweitert das obige snippet, mit einer $_GET-Zustand.
für das Debuggen nur " Anhängen "?dbg_table=tx_some_of_my_tables" an Ihre Adresse, und Sie sind bereit zu gehen 😉
Einer saubereren Möglichkeit zum Debuggen Ihrer Anweisungen bei der Verwendung von TYPO3 6.1 ist die Verwendung der query parser von
Typo3DbBackend
.Den parser gibt ein array mit den verschiedenen teilen der generierten SQL-Anweisung.
Mit TYPO3 6.2 die
parseQuery
Methode wurde verschobenTypo3DbQueryParser
und verlor seinen zweiten parameter.ich schlage vor, setzen diese in typo3conf/LocalConfiguration.php Datei unter 'SYS' - Arrays
dann schreiben falsche Feldname in der Abfrage absichtlich und dann code ausführen.
diese zeigt die Letzte Abfrage, ausführen mit Fehler.