Мой слушатель является частью поведения, которое должно удалить все is_published проверки в предложении where любого вызываемого запроса select. Добавление части в предложение очень просто, но как ее удалить.Doctrine: Как удалить часть предложения where из выбранного запроса внутри прослушивателя (preDqlSelect)?
Есть некоторые функции, такие как Doctrine_Query->removeDqlQueryPart('where')
, , но который удаляет полное предложение where, в то время как мне нужна только часть 'is_published = ?'
, которую нужно удалить.
Однако я мог бы как-то справиться с этим вручную, с регулярным выражением или что-то в этом роде. Но сложная часть заключается в том, как удалить параметр, представленный символом '?' из массива соответствующих параметров (извлекается Doctrine_Query->getRawParams()
).
Так я спрашиваю, есть чистый способ превратить этот вид запроса:
...FROM Video v WHERE v.is_published = ? AND v.start_date < ? AND v.end_date > ?
к этому раздели один и не портя Params, представленные знаками вопроса:
...FROM Video v WHERE v.start_date < ? AND v.end_date > ?
Это, конечно, простой пример, мои запросы немного сложнее. К сожалению, я придерживаюсь doctrine 1.0.x из-за рамки symfony.
Спасибо за это. Примеры идут длинный путь :) – Aeolun
наслаждайтесь и наслаждайтесь :) –
Это решение работает для предложения where, но не для примера: «groupBy»: в этом случае getParts() следует заменить на: ... $ qb_group_by_part = $ qb-> getDqlPart ('groupBy'); $ qb_group_by_part = isset ($ qb_group_by_part ["parts"])? $ qb_group_by_part ["parts"]: array(); .. – Tsounabe