2016-09-27 47 views
0

我正在重新編碼Symfony 1.4上的網站推進和一個小時以上我正在尋找如何我可以用Propel做到這一點? (推進上Symfony的1.4 1.4)symfony 1.4 propel結合兩個AND在範圍內與OR在哪裏條款

SELECT * FROM 'test' WHERE (var_1 = 1 AND var_2 = 2) OR (var_1 = 2 AND var_2 = 1) 

我這個代碼

$c = new Criteria(); 
$c->add(MessagesPeer::USER_FROM, $user->getId(), Criteria::EQUAL); 
$c->addAnd(MessagesPeer::USER_TO, $this->user_id, Criteria::EQUAL); 
$c->addOr(MessagesPeer::USER_FROM, $this->user_id, Criteria::EQUAL); 
$c->add(MessagesPeer::USER_TO, $user->getId(), Criteria::EQUAL); 

嘗試,但結果是這樣的:

WHERE (messages.USER_FROM=16405 OR messages.USER_FROM=56) AND messages.USER_TO=16405 

有什麼建議?

回答

0

您的Propel版本過時了。我強烈建議你將你的Propel升級到至少1.5版,這個版本的發佈超過了6 years ago

使用V1.5 +,你可以使用新的查詢類,像這樣:

$messages = MessagesQuery::create() 
    ->condition('cond1', 'Messages.UserFrom = ?', $user->getId()) 
    ->condition('cond2', 'Messages.UserTo = ?', $this->user_id) 
    ->combine(['cond1', 'cond2'], 'and', 'cond12') 
    ->condition('cond3', 'Messages.UserFrom = ?', $this->user_id) 
    ->condition('cond4', 'Messages.UserTo = ?', $user->getId()) 
    ->combine(['cond3', 'cond4'], 'and', 'cond34') 
    ->where(['cond12', 'cond34'], 'or') 
    ->find(); 

見的Propel Relational API documentation使用條件。