Zum Inhalt springen

ExtBase: Unterstützung fürs Debugging verfügbar?

Erstellt am 19. März 2010 · 2 Antworten · letzte Antwort am 30. März 2010

Tags: Frage

tpuppe ·

Hallo,

ich beginne, mit ExtBase/Fluid zu experimentieren, um Typo3 Extensions zu schreiben. Dabei stoße ich gerade auf ein simples, aber ärgerliches Problem. Beim einfachen Eintragen von Daten über ein Model und Repository generiert ExtBase einen MySQL-Code, der zu einem MySQL-Syntax-Fehler führt. Ich finde keine Möglichkeit, dem näher auf den Grund zu gehen.

Abstraktes Problem: wie kann ich besser in ExtBase hineinschauen? Gibt es einen Debug-Modus oder ein internes Fehlerprotokoll?

Konkretes Problem: nach dem Erzeugen eines Model-Objektes und dem Hinzufügen zum Repository bekomme ich einen MySQL-Syntaxfehler, der die verursachende Query allerdings nur teilweise anzeigt.

$this->request = new Tx_Llhrequestlog_Domain_Model_Request; // Befüllung im Kontruktor
$this->requestRepository->add($this->request);

führt zu diesem Fehler:

Tx_Extbase_Persistence_Storage_Exception_SqlError: Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'WHERE uid='42'' in Zeile 1

Ein Datensatz 42 wird in die Datenbank eingetragen (auto_increment, also jedes mal ein neuer Datensatz), aber die Felder sind leer. Was mach ExtBase im Hintergrund mit einer "WHERE uid='42'" Query? Kennt jemand das Problem?

Vielen Dank.

kainobi ·

Hi!

Soweit ich weiss gibt´s kein internes Logging (in vielen Fällen werden halt Exceptions geworfen und ein Stacktrace ausgegeben). Die Querys werden in Classes/Persistence/Storage/Typo3DbBackend.php zusammengesetzt. Evt. kannst Du dort an den fraglichen Stellen einfach die fertigen sql-Statements ausgeben.

tpuppe ·

Vielen Dank, Kainobi.

Zwei Dinge: erstens hat der Tipp, direkt die Datei "Classes/Persistence/Storage/Typo3DbBackend.php" anzuzapfen, geholfen. Dort sieht man, dass tatsächlich erst ein leerer Datensatz erzeugt wird und dieser dann aktualisiert wird:

addRow() legt mit 
INSERT INTO tx_llhrequestlog_domain_model_request (crdate, tstamp, pid) VALUES ('1269952270', '1269952270', '0') 
einen neuen Datensatz an, der hier per auto_increment die uid 50 bekommt.

updateRow() führt dann diese Query aus: 
UPDATE tx_llhrequestlog_domain_model_request SET campaign='testCampaign', action='testAction', ipaddress=NULL, datetime=NULL, tstamp='1269952325' WHERE uid='50'

Zweitens habe ich daran den Fehler noch nicht finden können, wei ich vor dem Anschauen der Queries noch ein wenig mit dem Kickstarter gespielt habe und es danach funktioniert hat. Fals ich den entscheidenden Unterschied zwischen meiner Version und der Kickstarter-Version noch finde, werde ich ihn hier posten.