Il mio listener fa parte di un comportamento che dovrebbe rimuovere tutti i controlli is_published nella clausola where di qualsiasi query di selezione chiamata. Aggiungere una parte a una clausola è davvero semplice, ma come rimuoverne una.Doctrine: come rimuovere parte di una clausola where da select query inside listener (preDqlSelect)?
Ci sono alcune funzioni come Doctrine_Query->removeDqlQueryPart('where')
, ma che rimuove la clausola where completa, mentre ho solo bisogno della parte 'is_published = ?'
da rimuovere.
Tuttavia ho potuto gestire manualmente in qualche modo, con regex o qualcosa del genere. Ma la parte difficile è, come rimuovere il parametro rappresentato dal '?' dalla matrice dei parametri corrispondenti (recuperabile da Doctrine_Query->getRawParams()
).
Quindi chiedo, c'è un modo pulito per trasformare questo tipo di query:
...FROM Video v WHERE v.is_published = ? AND v.start_date < ? AND v.end_date > ?
a questo spogliato uno e senza rovinare i params rappresentati dai punti interrogativi:
...FROM Video v WHERE v.start_date < ? AND v.end_date > ?
Questo è ovviamente solo un semplice esempio, le mie domande sono un po 'più complesse. Sfortunatamente sono bloccato con doctrine 1.0.x a causa del framework symfony.
Grazie per quello. Esempi andare un lungo cammino :) – Aeolun
godere e godere :) –
Questa soluzione funziona per il "dove" clausola, ma non ad esempio la clausola "groupBy": In questo caso i getParts() dovrebbe essere sostituito da: ... $ qb_group_by_part = $ qb-> getDqlPart ('groupBy'); $ qb_group_by_part = isset ($ qb_group_by_part ["parts"])? $ qb_group_by_part ["parts"]: array(); .. – Tsounabe