#cakephp #find #nested #conditional-statements
#cakephp #Найти #вложенный #условные операторы
Вопрос:
Ниже приведено мое условие:
'OR' =>
array(
'AND' => array(
array('EventCompetitor.is_black' => 1),
array('EventCompetitor.is_adult' => 1)
),
'AND' => array(
array('EventCompetitor.is_black' => 0),
array('EventCompetitor.is_adult' => 0)
),
),
Когда я отлаживаю свой запрос, он выдает что-то вроде этого, что неверно:
AND ((`EventCompetitor`.`is_black` = 0) AND (`EventCompetitor`.`is_adult` = 0)) AND
Так вот, это не то, чего я хочу, я хочу, чтобы это было что-то вроде этого:
((`EventCompetitor`.`is_black` = 1) AND (`EventCompetitor`.`is_adult` = 1)) OR ((`EventCompetitor`.`is_black` = 0) AND (`EventCompetitor`.`is_adult` = 0))
Есть идеи, как я могу этого добиться?
Спасибо!
Ответ №1:
ваши подразделы в вашем массиве с ключом «ИЛИ» имеют одно и то же имя, причем второй ключ эффективно перезаписывает первый. вам нужно инкапсулировать эти условия «И» в их собственные массивы, чтобы предотвратить столкновение ключей.
например. вместо:
'OR' =>
array(
'AND' => array(
array('EventCompetitor.is_black' => 1),
array('EventCompetitor.is_adult' => 1)
),
'AND' => array(
array('EventCompetitor.is_black' => 0),
array('EventCompetitor.is_adult' => 0)
),
),
выполнить:
'OR' =>
array(
array('AND' => array(
array('EventCompetitor.is_black' => 1),
array('EventCompetitor.is_adult' => 1)
)),
array('AND' => array(
array('EventCompetitor.is_black' => 0),
array('EventCompetitor.is_adult' => 0)
)),
),
Ответ №2:
Я не тестировал это, но я думаю, вам нужно следующее:
'OR' =>
array(
array(
array('EventCompetitor.is_black' => 1),
array('EventCompetitor.is_adult' => 1)
),
array(
array('EventCompetitor.is_black' => 0),
array('EventCompetitor.is_adult' => 0)
)
)
AND
подразумевается между условиями, вам нужно только определить OR
группы
Ответ №3:
Я думаю, вам нужен дополнительный array (), я не уверен, но попробовать стоит:
'OR' =>
array(
array(
'AND' => array(
array('EventCompetitor.is_black' => 1),
array('EventCompetitor.is_adult' => 1)
)
),
array(
'AND' => array(
array('EventCompetitor.is_black' => 0),
array('EventCompetitor.is_adult' => 0)
)
)
),