Как удалить конкретную часть dql в запросе Doctrine_RawSql? - PullRequest
1 голос
/ 09 июня 2010

Я прочитал это

Доктрина: Как удалить часть предложения where из запроса select внутри слушателя (preDqlSelect)?

но я все еще не вижукак удалить конкретную часть, это явно не написано, может кто-нибудь объяснить мне, как?

образец моего Doctrine_RawSql

$a = new Doctrine_RawSql();

            $a->select('{m.username}, {m.age}, {m.photo_principale_petit_format},{m.photo_principale_grand_format}')->              
                from('(SELECT * FROM member_user where id > ( SELECT max(id)-15000 as maximum FROM member_user)) as m')->
                innerJoin('member_group_history as g ON m.id = g.member_user_id')->
                where('g.old_member_group_id = ?', 7)->
                andWhere('m.is_visible = ?', 1)->               
                andWhere('m.sexe = ?', $this->getSexeRecherche())->             
                andWhere('m.age >= ?', $this->getMinAgeSearch())->
                andWhere('m.age <= ?', $this->getMaxAgeSearch())->      
                andWhereIn('m.member_group_id', array(10,11))-> 
                andWhere('g.created_at >= ?', date("Y-m-d H:i:s",strtotime("- 20 weeks")))->
                andWhere('g.created_at <= ?', date("Y-m-d H:i:s",strtotime("now")))->
                limit($limit)->             
                addComponent('m', 'MemberUser m');                          

на самом деле я просто хочу проверить, если мой счетчик запросоввернуть достаточно результата и удалить конкретные предикаты, если нет.

Ответы [ 2 ]

5 голосов
/ 10 августа 2015

Пример удаления groupBy на DQL:

$a->resetDQLPart('groupBy')
0 голосов
/ 09 июня 2010

$ a - это объект, поэтому вы можете закрыть создаваемый запрос с помощью ";" куда угодно и добавьте условные операторы на основе других значений:

$a->select('t.something')
->from('Table t')
->where('t.id = 1');
if($todays_weather == 'sunny') $a->andWhere(t.weather = ?, 'sunny');
if($todays_temperature == 'hot') $a->andWhere(t.temperature = ?, 'hot');
etc...

Однако, если вы хотите построить запрос на основе подсчета И вы хотите достичь этого в одном запросе, а не разбивать его на два, я думаю, я бы написал его как прямой SQL для проще и понятнее.

...