2012-02-26 63 views
2

我使用propel进行数据库交互。现在我必须创建一个查询,如Propel ORM:如何在where子句中使用自己的括号

SELECT data FROM values WHERE a=1 AND (vis=1 or (vis=0 AND userID=5)); 

我从表“值”创建一个推动对象。

$p = new ValuesQuery()::create 
    ->filterByA(1) 
    ->filterByVis(1) 
    ->_or() 
    ->filterByVis(0) 
    ->filterByUserId(5) 
    ->findOne(); 

的Propel生成以下SQL查询这主要是有道理的:

SELECT data FROM values WHERE a=1 AND (vis=1 or vis=0) AND userID=5; 

我怎么能解决这个问题?是否可以说推动它应该放在括号内?

感谢您的所有答案!

+0

按我的回答@kirilloid,我认为你正在寻找的结合()查询操作符。我没有使用它,但检查文档 - 我认为它们一般都很好。 – halfer 2012-03-06 22:54:27

回答

1

玩下一个工具不仅可以回答您的特定问题,还可以帮助您了解复杂条件的构建。

http://propel.jondh.me.uk/criteria/analyse

+0

当我的Propel生成器发布':)'时,我总是很高兴 - 但它只生成Criteria表达式,它将在Propel 2.0中逐步淘汰。我怀疑OP是在寻找'combine()'操作符。 – halfer 2012-03-06 22:53:44

+0

我只是把他的查询放入那个生成器中,它产生了一些有意义的输出=) – kirilloid 2012-03-06 23:13:14

+0

是的,它肯定会与Propel 1.x一起工作 - 抛开一个或两个匕首! '';-) – halfer 2012-03-07 00:45:14