Доктрина: Как удалить часть где пункт от запроса Select внутренний слушатель (preDqlSelect)?

Мой слушатель является частью поведения, которое должно удалить все регистрации is_published где пункт любого названного запроса Select. Добавление части к пункту действительно легко, но как удалить тот.

Существуют некоторые функции как Doctrine_Query->removeDqlQueryPart('where'), но это удаляет полное, где пункт, в то время как мне только нужно 'is_published = ?' часть, которая будет удалена.

Однако я мог обработать это вручную так или иначе с regex или чем-то. Но хитрая часть, как удалить параметр, представленный'?' от соответствующего массива параметров (восстановимый Doctrine_Query->getRawParams()).

Таким образом, я спрашиваю, там очевидный способ для преобразования этого вида запроса:
...FROM Video v WHERE v.is_published = ? AND v.start_date < ? AND v.end_date > ?

к этому разделенному и не портя параметрические усилители, представленные вопросительными знаками:
...FROM Video v WHERE v.start_date < ? AND v.end_date > ?

Это - конечно, просто простой пример, мои запросы немного более сложны. К сожалению, я застреваю с доктриной 1.0.x из-за платформы симфонии.

6
задан virtualize 14 October 2009 в 17:01
поделиться

1 ответ

Вызов $query->getDqlPart('where') вернет массив частей предложения where, добавленных с помощью функций where(), andWhere() и др. Таким образом, вы можете использовать это для поиска и удаления нужной вам части.

Затем нужно разобраться с параметрами. При циклическом просмотре частей where вам нужно будет найти все параметры, посчитать их и запомнить номера для всех удаленных, а затем вызвать $params = $query->getParams();, а параметры пункта where будут в $params['where'], так что вы можете удалить их оттуда, а затем вызвать $query->setParams($params);

8
ответ дан 8 December 2019 в 16:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: