我在PHP应用程序中使用推进ORM。
通过阅读文档,我无法确定如何提出此类请求:
SELECT x FROM table where col1 = 'xxx' and not(col2=1 AND col3=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();
它创建:
然后它将 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();