CakePHP查找两个日期之间的查询条件

Jos*_*hua 11 time cakephp date between

我的数据库中有一个开始和结束日期,表单字段中有一个$ date变量.我现在正在尝试查询所有行,其中$ date是db中的开始/结束日期,或者是这两行之间的任何日期.

这与daysAsSql如何工作的文档中描述的内容相反.我无法弄清楚如何让它发挥作用.以下行不能用作控制器中的查找条件:

'? BETWEEN ? AND ?' => array($date, 'Item.date_start', 'Item.date_end'),
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.这真让我抓狂.

这是完整的Query和相应的SQL:

$conditions = array(
            'conditions' => array(
            'and' => array(
                '? BETWEEN ? AND ?' => array($date, 'Item.date_start', 'Item.date_end'),
                'Item.title LIKE' => "%$title%",
                'Item.status_id =' => '1'
                )));

        $this->set('items', $this->Item->find('all', $conditions));



WHERE (('2012-10-06' BETWEEN 'Item.date_start' AND 'Item.date_end') AND (`Item`.`title` LIKE '%%') AND (`Item`.`status_id` = 1))
Run Code Online (Sandbox Code Playgroud)

Aru*_*ain 27

$conditions = array(
        'conditions' => array(
        'and' => array(
                        array('Item.date_start <= ' => $date,
                              'Item.date_end >= ' => $date
                             ),
            'Item.title LIKE' => "%$title%",
            'Item.status_id =' => '1'
            )));
Run Code Online (Sandbox Code Playgroud)

尝试上面的代码,并询问它是否适合您.

编辑: 根据@Aryan请求,如果我们必须找到在1个月之间注册的用户:

$start_date = '2013-05-26'; //should be in YYYY-MM-DD format
$this->User->find('all', array('conditions' => array('User.reg_date BETWEEN '.$start_date.' AND DATE_ADD('.$start_date.', INTERVAL 30 DAY)')));
Run Code Online (Sandbox Code Playgroud)

  • 轻松优雅.功能完美,非常感谢! (2认同)

Adi*_*att 5

这是CakePHP BETWEEN查询示例。

我将数组定义为变量,然后在 CakePHP 查找函数调用中使用这些变量:

// just return these two fields
$fields = array('uri', 'page_views');

// use this "between" range
$conditions = array('Event.date BETWEEN ? and ?' => array($start_date, $end_date));

// run the "select between" query
$results = $this->Event->find('all', 
         array('fields'=>$fields, 
               'conditions'=>$conditions));
Run Code Online (Sandbox Code Playgroud)

参考自