Cakephp找到' OR'的语法和' AND'复杂的连接条件

时间:2015-06-30 17:03:18

标签: cakephp cakephp-2.0

我有一个任务计划应用程序,并且我尝试根据两个标准获取任务:要么在接下来的两周内有到期日,要么任务本身在2周内结束。这是我的非工作代码:

  $conditions['AND'] = array(
        'OR'=>array(
            'AND'=>array(
                'Task.due_date >'=> $now,
                'Task.due_date <'=> $twfn
            ),
            'AND'=>array(
                'Task.end_time > '=> $now,
                'Task.end_time <' => $twfn
            )
        )
    );

还有其他条件,因此外部$conditions['AND']

SQL日志显示:

WHERE ((((`Task`.`end_time` > '2015-06-30') AND (`Task`.`end_time` < '2015-07-14')))

这意味着OR未被评估。如果相关,则每项任务都有end_time,但不一定是due_date

非常感谢任何正确方向的帮助或指示!

1 个答案:

答案 0 :(得分:3)

使用这个:AND s应该在数组中,因为你为数组提供相同的键(AND),最后一个将被使用

$conditions['AND'] = array(
    'OR'=>array(
        array(
            'AND'=> array(
                array(
                    'Task.due_date >'=> $now,
                ),
                array(
                    'Task.due_date <'=> $twfn
                )
            ),
        ),
        array(
            'AND'=>array(
                array(
                    'Task.end_time > '=> $now,
                ),
                array(
                    'Task.end_time <' => $twfn
                )
            )
        )
    )
);

来自docs的更多示例 http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#complex-find-conditions