如何使用CakePHP 3.x查询生成器表达或设置条件?
我尝试在cakephp 3.X中构建一个具有以下结构的查询: A、B、C和[D或E],其中A、B、C、D、E包含与或类似条件连接的值数组如何使用CakePHP 3.x查询生成器表达或设置条件?,php,cakephp,conditional-statements,query-builder,cakephp-3.x,Php,Cakephp,Conditional Statements,Query Builder,Cakephp 3.x,我尝试在cakephp 3.X中构建一个具有以下结构的查询: A、B、C和[D或E],其中A、B、C、D、E包含与或类似条件连接的值数组 $schools = $schools->where(['A IN' => $arrayOfAOptions]), $schools = $schools->where(['B IN' => $arrayOfBOptions]), $schools = $schools->where(['C IN' => $arrayO
$schools = $schools->where(['A IN' => $arrayOfAOptions]),
$schools = $schools->where(['B IN' => $arrayOfBOptions]),
$schools = $schools->where(['C IN' => $arrayOfCOptions])
// want this to be firstly joined with OR before joining other conditions with AND
$schools = $schools->where(['D IN' => $arrayOfCOptions])
//or
$schools = $schools->where(['E IN' => $arrayOfCOptions])
这里的问题是,我无法将字段D和E隔离为或,并将其他字段与和连接起来
在CakePHP2中,我通过以下代码实现了它
$queryConditions = array(
'or'=> array_merge(
array(
'School.D' => $this->Session->read('conditions.D')
),
array(
'School.E' => $this->Session->read('conditions.E')
)
)
);
然后根据条件将其合并到其余部分
任何帮助都将不胜感激您可以使用与CakePHP 2.x相同的样式,即传递嵌套在
或
键下的条件。您还可以将其包装在一个where()
调用中
$schools->where([
'A IN' => $arrayOfAOptions,
'B IN' => $arrayOfBOptions,
'C IN' => $arrayOfCOptions,
'OR' => [
'D IN' => $arrayOfDOptions,
'E IN' => $arrayOfEOptions
]
]);
您也可以使用或where()
,但最近它的行为有点脆弱
最后,可以使用表达式创建复杂条件。或
表达式方法可用于创建或
条件:
$schools->where(function ($expr) use ($arrayOfAOptions, $arrayOfBOptions) {
return $expr->or_([
'A IN' => $arrayOfAOptions,
'B IN' => $arrayOfBOptions,
]);
});
另请参见我们生活在2017年,您应该使用
['key'=>'value']
而不是古老的数组()
,因为它在格式方面有很大帮助(除非您需要向后兼容(这里讲的是PHP<5.4,古老的,应该忘记))。至于你的问题,它似乎是可靠的,我没有答案给你。但是,在您完成研究后,请向上投票。这只是为了让您知道我在迁移到cake 3.0和PHP7之前做了什么