我的監聽器是行爲的一部分,應該刪除任何被調用的select查詢的where子句中的所有is_published檢查。將一個部分添加到子句中非常簡單,但是如何刪除它。學說:如何從listener(preDqlSelect)中的select查詢中刪除部分where子句?
有一些功能,如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 > ?
這當然只是一個簡單的例子,我的查詢有點複雜。 不幸的是我因爲symfony框架而陷入了教條1.0.x。
謝謝你。例子很長:) – Aeolun 2015-12-28 06:14:45
享受和享受:) – 2016-01-22 21:08:57
此解決方案適用於「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 2016-10-24 15:11:33