Moje nasłuchiwanie jest częścią zachowania, które powinno usunąć wszystkie wypisane is_publikowane w klauzuli where dowolnego wywoływanego zapytania. Dodawanie części do klauzuli jest naprawdę łatwe, ale jak ją usunąć.Doctrine: Jak usunąć część klauzuli where z zapytania select wewnątrz detektora (preDqlSelect)?
Istnieje kilka funkcji, takich jak Doctrine_Query->removeDqlQueryPart('where')
, , ale to usuwa pełną klauzulę dokąd, a ja potrzebuję tylko części 'is_published = ?'
do usunięcia.
Jednak mogłem poradzić sobie z tym ręcznie w jakiś sposób, z regex czy coś takiego. Ale najtrudniejszą częścią jest, jak usunąć parametr reprezentowany przez "?" z odpowiedniej tablicy parametrów (możliwe do odzyskania przez Doctrine_Query->getRawParams()
).
Więc pytam, czy jest czysty sposób, aby przekształcić ten rodzaj zapytania:
...FROM Video v WHERE v.is_published = ? AND v.start_date < ? AND v.end_date > ?
tego uproszczoną jeden i nie brudząc się params reprezentowane przez znaki zapytania:
...FROM Video v WHERE v.start_date < ? AND v.end_date > ?
Jest to oczywiście prosty przykład, moje zapytania są nieco bardziej złożone. Niestety utknąłem z doktryną 1.0.x ze względu na framework symfony.
Dzięki za to. Przykłady idą bardzo długo :) – Aeolun
ciesz się i ciesz :) –
To rozwiązanie działa dla klauzuli "where", ale nie na przykład klauzuli "groupBy": W tym przypadku getParts() powinno zostać zastąpione przez: ... $ qb_group_by_part = $ qb-> getDqlPart ('groupBy'); $ qb_group_by_part = isset ($ qb_group_by_part ["parts"])? $ qb_group_by_part ["parts"]: array(); .. – Tsounabe