过滤CakePHP控制器中的日期范围

时间:2014-03-13 01:16:51

标签: php mysql cakephp

我有一个子任务和一个马模型。

马有很多子任务。

子任务有一个与之关联的日期。它是一个MYSQL日期对象,而不是日期时间。

在我的View / Horse / view.ctp中,我想只打印出给定日期范围之间的子任务,而我很难做到这一点。我可以使用常规过滤在我的控制器方法中传递子任务:

    $this->set('incomplete_subtasks', $this->Subtask->find('all', array('conditions' => array(
                'and' => array(
                    'completed ' => 0,
                    'Subtask.horse_id ' => $id)))));

我正在尝试使用此功能过滤日期范围:

$this->set('incomplete_subtasks', $this->Subtask->find('all', array('conditions' => array(
                'and' => array(
                    'completed ' => 0,
                    'Subtask.horse_id ' => $id,
                    'Subtask.date BETWEEN ? AND ?' => array(
                    date(Y-m-d),
                    date(Y-m-d, strtotime('+1 week'))

                    )
                )
            )
            )));

我在马/视图中收到此错误:

Notice (8): Use of undefined constant Y - assumed 'Y' [APP/Controller/HorsesController.php, line 56]

我在表达式中使用的每个常量都得到了这个错误 - 总共有六个。

1 个答案:

答案 0 :(得分:1)

我不确定你的意思"常数"因为我无法在代码中看到任何常量,所以我猜测它是因为你没有用引号括起Y-m-d(所以PHP假设它们是常量)。 / p>

首先,尝试用引号将它们包装起来:

'Subtask.date BETWEEN ? AND ?' => array(
    date('Y-m-d'),
    date('Y-m-d', strtotime('+1 week'))
)

如果不这样做,您应该为您的日期执行简单的<=>=,并且此处不需要您的条件的and密钥(除非还有其他您在代码中省略的数组键。

试试这个:

$this->set('incomplete_subtasks', $this->Subtask->find('all', array('conditions' => 
    array(
        'completed ' => 0,
        'Subtask.horse_id ' => $id,
        'Subtask.date >=' => date('Y-m-d'),
        'Subtask.date <=' => date('Y-m-d', strtotime('+1 week'))
    )
)));