查找全部中的多个条件

-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感到迷茫

mar*_*ark 5

实际上,您刚开始时表现不错(使用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)