如何删除学说 Doctrine Raw Sql 查询中的特定 dql 部分?

Posted

技术标签:

【中文标题】如何删除学说 Doctrine Raw Sql 查询中的特定 dql 部分?【英文标题】:How to remove specific dql part in a doctrine Doctrine_RawSql query? 【发布时间】:2010-06-09 09:14:56 【问题描述】:

我已经读过了

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');                          

实际上我只是想测试我的查询计数是否返回足够的结果,如果没有则删除特定的谓词。

【问题讨论】:

【参考方案1】:

在 DQL 上删除 groupBy 的示例:

$a->resetDQLPart('groupBy')

【讨论】:

谢谢你!这为我节省了很多时间!【参考方案2】:

$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 来进行操作更简单更清晰。

【讨论】:

我的意思是,与其删除谓词,不如从一开始就使它们成为有条件的。

以上是关于如何删除学说 Doctrine Raw Sql 查询中的特定 dql 部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Symfony2,学说 2 中使用 @SqlResultSetMapping?

学说不能返回 json 查询的结果

Symfony 2:如何避免会话表被学说迁移删除?

跨数据库关系学说2和PHP

学说减慢了表现

学说:在自引用中删除实体(多对多)