Mein Listener ist Teil eines Verhaltens, das alle is_published-Prüfungen in der WHERE-Klausel einer beliebigen aufgerufenen SELECT-Abfrage entfernen sollte. Es ist wirklich einfach, ein Teil zu einer Klausel hinzuzufügen, aber wie man es entfernt.Lehre: Wie man Teil einer where-Klausel von der auserwählten Abfrage innerhalb des Zuhörers entfernt (preDqlSelect)?
Es gibt einige Funktionen wie Doctrine_Query->removeDqlQueryPart('where')
, , aber das entfernt die komplette Where-Klausel, während ich nur den 'is_published = ?'
Teil entfernt werden muss.
Allerdings könnte ich das manuell irgendwie, mit Regex oder so etwas. Aber der schwierige Teil ist, wie man den durch das '?' Dargestellten Parameter entfernt. aus dem entsprechenden Parameter-Array (abrufbar unter Doctrine_Query->getRawParams()
).
Also frage ich, ist es eine saubere Art und Weise, diese Art von Abfrage zu transformieren:
...FROM Video v WHERE v.is_published = ? AND v.start_date < ? AND v.end_date > ?
zu diesem abgezogen und ohne die params durch die Fragezeichen dargestellt vermasselt:
...FROM Video v WHERE v.start_date < ? AND v.end_date > ?
Dies ist natürlich nur ein einfaches Beispiel, meine Abfragen sind etwas komplexer. Leider bin ich wegen des Symfony-Frameworks mit Doktrin 1.0.x festgefahren.
Danke dafür. Beispiele gehen einen langen Weg :) – Aeolun
genießen und genießen :) –
Diese Lösung funktioniert für die "where" -Klausel aber nicht zum Beispiel die "groupBy" -Klausel: In diesem Fall sollte die getParts() ersetzt werden durch: ... $ qb_group_by_part = $ qb-> getDqlPart ('groupBy'); $ qb_group_by_part = isset ($ qb_group_by_part ["Teile"])? $ qb_group_by_part ["Teile"]: array(); .. – Tsounabe