Lehre 2 DQL – Ausdrücke und Funktionen im QueryBuilder verschachteln
-
13-12-2019 - |
Frage
ich habe gefunden DoctrineExtensions Modul, das einige nützliche MySQL-Funktionen implementiert hat.Aber ich denke, mein Problem ist ein allgemeines.Wie würden Sie einen anderen MySQL-Ausdruck als Parameter an eine Funktion übergeben?
Wenn ich 2 Spalten hätte updated_at
die ein DATETIME
Und lifespan
Das ist ein INT
und ich wollte abfragen, ob die Lebensdauer einer Entität abgelaufen ist, ich könnte dies tun;
WHERE 0 > TIMESTAMPDIFF(SECONDS, NOW(), e.updated_at + INTERVAL e.lifespan SECOND)
Im QueryBuilder ist es ungefähr so.
$qb->andWhere('0 > TIMESTAMPDIFF(SECONDS, CURRENT_TIMESTAMP(), e.updated_at + INTERVAL e.lifespan SECOND)');
Aber der Parser mag es nicht + INTERVAL e.lifespan SECOND
weil es die schließende Klammer anstelle eines Pluszeichens erwartet.
Lösung
Mir wurde klar, dass ich die DateAdd-Klasse aus dem verwenden kann DoctrineExtensions Modul.
TIMESTAMPDIFF(SECOND, CURRENT_TIMESTAMP(), DATEADD(e.updated_at, INTERVAL e.lifespan SECOND))