2016-09-27 1 views
0

Je recompose le site sur Symfony 1.4 avec propel et d'une heure et plus je cherche comment je peux le faire avec Propel? (Propel 1.4 sur Symfony 1,4)symfony 1.4 propel combiner deux AND dans des étendues avec OR dans where clause

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

Je suis en train avec ce code

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

mais les résultats est la suivante:

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

Toutes les suggestions?

Répondre

0

Votre version de Propel est très obsolète. Je recommande fortement que vous mettre à jour votre Propel à au moins 1,5, qui a été publié plus de 6 years ago.

En utilisant v1.5 +, vous pouvez utiliser la nouvelle classe de requêtes, comme ceci:

$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(); 

Voir Propel Relational API documentation pour l'utilisation de conditions.