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)
这是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)