Doktrini: dinleyici (preDqlSelect) iç seçme sorgudan nerede fıkra parçası kaldırmak nasıl?

1 Cevap php

Benim dinleyici bir davranışın parçası, herhangi denilen seçme sorgusu nerede maddedeki bütün is_published kontrolleri kaldırmanız gerekir. Bir maddeye bir kısmını ekleme gerçekten kolaydır, ancak birini kaldırmak için nasıl.

There are some functions like Doctrine_Query->removeDqlQueryPart('where'), but that removes the complete where clause, while I only need the 'is_published = ?' part to be removed.

Ancak ben regex falan manuel bir şekilde bu ele verebilir. Ama zor kısmı tarafından temsil parametresini kaldırmak için nasıl, '?' (Doctrine_Query->getRawParams() tarafından alınabilir) ilgili parametreler diziden.

So I ask, is there a clean way to transform this kind of query:
...FROM Video v WHERE v.is_published = ? AND v.start_date < ? AND v.end_date > ?

to this stripped one and without messing up the params represented by the question marks:
...FROM Video v WHERE v.start_date < ? AND v.end_date > ?

This is of course just a simple example, my queries are a bit more complex. Unfortunately I'm stuck with doctrine 1.0.x because of the symfony framework.

1 Cevap

$ Sorgu-> getDqlPart ('') çağırarak onlar yerde (yoluyla ilave edildi gibi fıkra), andwhere (), vb fonksiyonları parçaların bir dizi döndürür. Yani istediğiniz parçayı bulmak ve kaldırmak için kullanabilirsiniz.

Sonra params ile uğraşmak zorunda. Nerede parçalar ile bisiklet sırasında tüm bulmak gerekir? ve onları saymak ve kaldırmak ve daha sonra $ params = $ sorgu-> getParams () çağrı olanlardan herhangi için sayıları hatırlayın; ve fıkra parametreler $ params [''] olacak nereye kadar oradan bunları kaldırmak ve daha sonra $ sorgu-> SetParams ($ params) arayabilir;