2012-02-26 33 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