symfony 1.4推进将两个AND组合在范围内,其中OR在where子句中

时间:2016-09-27 18:32:57

标签: symfony-1.4 propel

我正在使用推进器对Symfony 1.4上的网站进行重新编码,从一小时开始,我正在搜索如何使用Propel进行此操作? (关于Symfony 1.4的Propel 1.4)

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的Propel版本已过时。我强烈建议您将Propel升级到至少1.5,发布时间超过6 years ago

使用v1.5 +,您将使用新的Query类,如下所示:

$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了解使用条件。