如何删除Doctrine Doctrine_RawSql查询中的特定dql部分?

时间:2010-06-09 09:14:57

标签: php orm symfony1 doctrine

我已经读过这个

Doctrine: How to remove part of a where clause from select query inside listener (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 个答案:

答案 0 :(得分:5)

在DQL上删除groupBy的示例:

$a->resetDQLPart('groupBy')

答案 1 :(得分:0)

$ 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来制作东西更容易和更清晰。