推动"而不是"询问

时间:2016-10-24 20:58:29

标签: php mysql orm propel

我在PHP应用程序中使用推进ORM。

通过阅读文档,我无法确定如何提出此类请求:

SELECT x FROM table where col1 = 'xxx' and not(col2=1 AND col3=2);

使用纯推进逻辑执行此请求的最简洁方法是什么?

由于

2 个答案:

答案 0 :(得分:3)

您正在寻找的完整查询应该是这样的:

$books = TableQuery::create()
    ->condition('cond1', 'col1 = ?', 'xxx')
    ->condition('cond2', 'col2 != ?', 1)
    ->condition('cond3', 'col3 != ?', 2)
    ->combine(array('cond2', 'cond3'), 'or', 'cond23')
    ->where(array('cond1', 'cond23'), 'and')
    ->find();

它创建:

  • a cond1 条件 col1 =' xxx'
  • a cond2 条件 col2!= 1
  • a cond3 条件 col3!= 2

然后它将 cond2 cond3 运算符组合在一个新的 cond23 中,以便

cond23 = cond2 or cond3

并将 cond23 cond1 运算符结合使用,以便最终查询

where(cond1 and cond23)

答案 1 :(得分:1)

您的查询将等同于:

SELECT x FROM table where col1 = 'xxx' and (col2 != 1 OR col3 != 2);

假设你正在使用推进2,你应该能够完成你想要的:

$result = TableQuery::create()
    ->filterByCol1('xxx')
    ->filterByCol2(1, Criteria:NOT_EQUAL)
    ->_or()
    ->filterByCol3(2, Criteria:NOT_EQUAL)
    ->find();