-3 cakephp conditional-statements
我想在查找中输入某些条件(蛋糕上的“全部”。这是我的逻辑:
Traduction.traductions = my username AND Traduction.status = 1 OR 8
OR, Traduction.check1 = my username AND Traduction.status = 5 OR 2
OR, Traduction.check2 = my username AND Traduction.status = 6 OR 3
Or, Trauduction.editions = my username AND Traduction.status = 7 OR 3
Run Code Online (Sandbox Code Playgroud)
如果这些条件之一正确,他将显示内容
到目前为止,这是我的代码
$conditions = array(
'AND' => array(
array(
'OR' => array(
array('Traduction.traductions' => $this->Session->read('Auth.User.username')),
array('Traduction.status' => '1'),
array('Traduction.status' => '8')
)
),
'AND' => array(
array(
'OR' => array(
array('Traduction.check1' => $this->Session->read('Auth.User.username')),
array('Traduction.check1' => '5'),
array('Traduction.check1' => '2')
)
)
),
'AND' => array(
array(
'OR' => array(
array('Traduction.check2' => $this->Session->read('Auth.User.username')),
array('Traduction.check2' => '6'),
array('Traduction.check2' => '3')
)
)
),
'AND' => array(
array(
'OR' => array(
array('Traduction.edition' => $this->Session->read('Auth.User.username')),
array('Traduction.edition' => '7'),
array('Traduction.edition' => '4')
)
)
),
)
);
$traduction = $this->Traduction->find('all', array(
'conditions' => $conditions
));
Run Code Online (Sandbox Code Playgroud)
但可悲的是似乎无效。这里de sql dump
SELECT `Traduction`.`id`, `Traduction`.`serie`, `Traduction`.`issue`,
`Traduction`.`page`, `Traduction`.`writer`, `Traduction`.`drawer`,
`Traduction`.`release`, `Traduction`.`traductions`, `Traduction`.`check1`,
`Traduction`.`check2`, `Traduction`.`edition`, `Traduction`.`user_name`,
`Traduction`.`content`, `Traduction`.`status` FROM
`dcomicstrad`.`traductions` AS
`Traduction` WHERE ((((`Traduction`.`traductions` = 'DrWhat')
OR (`Traduction`.`status` = 1)
OR (`Traduction`.`status` = 8)))
AND (((`Traduction`.`edition` = 'DrWhat')
OR (`Traduction`.`edition` = '7')
OR (`Traduction`.`edition` = '4'))))
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我,我对所有这些数组X_X感到迷茫
实际上,您刚开始时表现不错(使用OR案例),但随后陷入了同样的旧问题:切勿两次使用数组键(它将覆盖前一个)!
$conditions = array(
'AND' => array(),
'AND' => array(),
'AND' => array(),
Run Code Online (Sandbox Code Playgroud)
基本上做到了。
用这个:
$conditions = array(
array(),
array(),
array(),
Run Code Online (Sandbox Code Playgroud)
您可以删除'AND' =>零件,因为默认情况下,蛋糕使用AND连接数组阵列。
如果要保留AND,则需要将其加深一杆:
$conditions = array(
'AND' => array(
array(),
array(),
array(),
Run Code Online (Sandbox Code Playgroud)
附带说明:我们仍在谈论CakePHP。因此包含至少一点点魔术,使您的生活更轻松。您可以在此处简化查询。每个OR语句都可以用较短的数组代替:
'OR' => array(
array('Traduction.traductions' => $this->Session->read('Auth.User.username')),
array('Traduction.status' => '1'),
array('Traduction.status' => '8')
)
Run Code Online (Sandbox Code Playgroud)
可以变成
'OR' => array(
array('Traduction.traductions' => $this->Session->read('Auth.User.username')),
array('Traduction.status' => array('1', '8'),
)
Run Code Online (Sandbox Code Playgroud)