[Cakephp 3查询,条件数组构建在foreach循环中

问题描述 投票:0回答:1

你好,我想使用数组作为条件。例如,我有一个带有zip组合的服务

12345 =>清洁,54321 =>清洁

现在我在一个foreach循环中一起构建我的数组

$searcharray = [];
foreach($services as $key => $val){
    searcharray[] = array('service' => $val['service'], 'zip' => $val['zip']);
}

我的搜索数组看起来像这样:

[
    (int) 0 => [
        'service' => 'cleaning',
        'zip' => '12345'
    ],
    (int) 1 => [
        'service' => 'cleaning',
        'zip' => '54321'
    ]
]

然后我尝试从请求表中获取数据

$this->loadModel('Requests');
$openrequests = $this->Requests->find('all', array(
  'conditions' => array(
    'OR' => array(
      $searcharray
    )
  )
));

它可能不适用于数组中的键,因为我在$ searcharray之后设置了[1],然后它起作用了。我不想将条件写为字符串,但是我该如何解决呢?

php cakephp conditional-statements query-builder cakephp-3.x
1个回答
0
投票

您将条件嵌套的层次太深了。

您的$searcharray已经正确嵌套,如果再次像示例中那样嵌套,则基本上是在创建OR节点,其中只有一个子节点(该子节点本身又有子节点),这基本上被解释为“什么也没有”,因为您至少需要两个孩子才能使用运算符。然后,将嵌套在数组中更深一层的子级解释为AND,因为这是未指定任何运算符时的默认值。]

长话短说,照原样通过$searcharray

'conditions' => [
    'OR' => $searcharray,
]

另请参见

© www.soinside.com 2019 - 2024. All rights reserved.