Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP查询-复杂和/或条件_Php_Sql_Cakephp - Fatal编程技术网

CakePHP查询-复杂和/或条件

CakePHP查询-复杂和/或条件,php,sql,cakephp,Php,Sql,Cakephp,我试图了解CakePHP的复杂查找条件,并且已经阅读了,但是我正在努力处理这一查询 SELECT field1, field2 WHERE id = 123456 AND ((holding_date = Last_day(holding_date) AND Month(holding_date) IN(3, 6, 9, 12)) OR (holding_date = '2013-09-15')) 要生成上述条件,我的条件数组将是什么样子?请尝试

我试图了解CakePHP的复杂查找条件,并且已经阅读了,但是我正在努力处理这一查询

SELECT field1,
       field2
WHERE id = 123456
  AND ((holding_date = Last_day(holding_date)
        AND Month(holding_date) IN(3, 6, 9, 12))
       OR (holding_date = '2013-09-15'))
要生成上述条件,我的
条件数组将是什么样子?

请尝试以下操作:

$params['conditions'] = array(
    '`id`' =>  123456,
    'AND' => array(
        '`holding_date`' => 'LAST_DAY(`holding_date`)',
        'AND' => array(
            'MONTH(holding_date)' => array(3, 6, 9, 12),
            'OR' => array(`holding_date` => '2013-09-15')
        )
    )
);
好的,我已经解决了:

$findParams['conditions'] = array(
            'Account.client_id' => '12345',
            'AND' => array(
                'OR' => array(
                    'Holding.holding_date' => '2013-09-15',
                    'AND' => array(
                        'Holding.holding_date = LAST_DAY(Holding.holding_date)',
                        'MONTH(Holding.holding_date)' => array(3,6,9,12)
                        )
                    )
                )
            );
CakePHP条件和sql表达式 虽然问题中的条件没有那么复杂,但它们涉及到一些要点,这意味着它们可能很难正确定义。定义cakephp条件时需要知道的一些事情:

  • 条件定义为键=>值对数组,因此同一个键不能在同一级别上定义两次
  • 具有数字键的数组元素被解释为sql表达式
  • 默认连接模式为“和”-不必在条件中指定
    ”和“=>…
  • 或条件必须有多个元素。如果它只有一个错误,那么就没有错误,否则:或者什么
考虑到上述注释,问题中的条件可以表示为:

$foo->find('all', array(
    'fields' => array(
        'field1',
        'field2'
    ),
    'conditions' => array(
        'id' => 123456,
        'OR' => array(
            array(
                'holding_date = LAST_DAY(holding_date)',
                'MONTH(holding_date)' => array(3,6,9,12)
            ),
            'holding_date' => '2013-09-15'
        )
    )
));
其结果是:

WHERE 
    `id` = 123456
    AND 
    (
        (
            (holding_date = LAST_DAY(holding_date))  
            AND
            (MONTH(holding_date) IN (3, 6, 9, 12)))
        )
        OR 
        (`holding_date` = '2013-09-15')
    )

注意:空格非常重要=)我最初误读了这个问题,完全是因为问题的sql中的空格不一致。

我不必尝试就知道这是不对的;您已将第一个日期条件之一与
条件分组在同一数组中。据我所知,当这不是我想要的时,这总是需要满足第一个条件。我的条件是“记录必须在季度的最后一天[前两个条件]或在我指定的日期[最后一个条件]”+1个好答案,但我建议将
规则放在它们自己的数组中。如果密钥重复,PHP不会发出警告,如果您在
hold\u date
上有两条规则,则只会使用最后一条规则。@MathewFoscarini不必要的嵌套会使内容难以阅读-因此,在需要时,或者在适当地构建条件时,这样做是一个好主意(对于任何数组键都可以这样说,
不是特例)。如果
保留日期
在两个
比较中,则在
中使用
更合适(即
'holding\u date'=>数组('first','second')
)。是的,回答很好。虽然我自己做到了,但你排除了不必要的“AND”s使其更加简洁。对于空格表示歉意-我不太确定如何将其应用于SQL