Cakephp 简单或条件

Cakephp simple OR condition

我想用 Cakephp find.. 执行简单的 OR 语句.. 无法使这个 or 条件正常工作,始终这往往会执行语句的第一部分而不是 OR..有人提供任何指示吗?

    $hols = $this->find('all', array(
        'conditions'  => array(
            'Holiday.leave_type <>' =>3,
            'Holiday.user_id' => $userID,
            'Holiday.start >=' => $firstDayThisMonth,
            'Holiday.start <=' => $lastDayThisMonth
        ),
        'OR' => array(
            'Holiday.leave_type' =>3,
            'Holiday.active' => 1,
            'Holiday.user_id' => null,
            'Holiday.start >=' => $firstDayThisMonth,
            'Holiday.start <=' => $lastDayThisMonth
        )
    )

OR 运算符仅适用于子数组。所以要表达规则 A OR B 你必须写成 'conditions'=>array('OR'=>array(array(A),array(B)))

where 子句的条件为:

$hols = $this->find('all', array(
    'conditions'  => array(
        'OR'=>array(
            array(
               'Holiday.leave_type <>' =>3,
               'Holiday.user_id' => $userID,
               'Holiday.start >=' => $firstDayThisMonth,
               'Holiday.start <=' => $lastDayThisMonth
            ),
            array(
               'Holiday.leave_type' =>3,
               'Holiday.active' => 1,
               'Holiday.user_id' => null,
               'Holiday.start >=' => $firstDayThisMonth,
               'Holiday.start <=' => $lastDayThisMonth
            )
        )
    )
)

您可以将其简化为:

$hols = $this->find('all', array(
    'conditions'  => array(
        'Holiday.start BETWEEN ? AND ?' => array($firstDayThisMonth,$lastDayThisMonth),
        'OR'=>array(
            array(
               'Holiday.leave_type <>' =>3,
               'Holiday.user_id' => $userID,
            ),
            array(
               'Holiday.leave_type' =>3,
               'Holiday.active' => 1,
               'Holiday.user_id' => null
            )
        )
    )
)