Запрос Cake php 3 с построением массива условий в цикле foreach - PullRequest
1 голос
/ 18 февраля 2020

Здравствуйте, я хочу использовать массив в качестве условия. Например, у меня есть сервисы с zip-комбинацией

12345 => очистка, 54321 => очистка

, теперь я строю свой массив вместе в foreach l oop

$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], а затем он работает. Я не хочу записывать условие в виде строки, но как я могу это решить?

1 Ответ

1 голос
/ 18 февраля 2020

Вы вложили условия на один уровень слишком глубоко.

Ваш $searcharray уже вложен правильно, если вы вложите его снова, как в вашем примере, то вы в основном создаете узел OR с только один дочерний элемент (который, в свою очередь, сам имеет дочерние элементы), который интерпретируется как «ничто», поскольку для использования оператора необходимо по крайней мере два дочерних элемента. Дочерние элементы в массиве, вложенные на один уровень глубже, будут интерпретироваться как AND, так как это значение по умолчанию, когда не указан оператор.

Короче говоря, просто передайте $searcharray как:

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

См. Также

...