CakePHP найти условие для запроса между двумя датами
У меня есть дата начала и дата окончания в моей базе данных и переменная $date из поля формы. Теперь я пытаюсь запросить все строки, где $date-это либо = дата начала/окончания в БД, либо любая дата между этими двумя.
Это своего рода противоположность тому, что описано в документах о том, как работает daysAsSql. Я не могу понять, как заставить его работать. Следующая строка не работает как условие поиска в контроллере:
'? BETWEEN ? AND ?' => array($date, 'Item.date_start', 'Item.date_end'),
Любая помощь очень ценится. Это сводит меня с ума. сумасшедший.
Вот полный запрос и соответствующий 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))
5 ответов:
$conditions = array( 'conditions' => array( 'and' => array( array('Item.date_start <= ' => $date, 'Item.date_end >= ' => $date ), 'Item.title LIKE' => "%$title%", 'Item.status_id =' => '1' )));
Попробуйте приведенный выше код и спросите, не сработал ли он для вас.
Редактировать: Согласно запросу @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)')));
Вот пример запроса
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));
Общий Пример Для CakePHP 2.X запрос
$_condition = array("TABLENAME.id" => $id, "TABLENAME.user_id" => array_unique($_array), 'date(TABLENAME.created_at) BETWEEN ? AND ?' => array($start_date, $end_date)); $result_array = $this->TABLENAME->find("all", array( 'fields' => array("TABLENAME.id", "TABLENAME.user_id", 'TABLENAME.created_at'), "conditions" => $_condition, "group" => array("TABLENAME.id"), //fields to GROUP BY 'joins' => array( array( 'alias' => 'T2', 'table' => 'TABLENAME2', 'type' => 'LEFT', 'conditions' => array('TABLENAME.t_id = TABLENAME2.t_id') ), array( 'alias' => 'T3', 'table' => 'TABLENAME3', 'type' => 'LEFT', 'conditions' => array( 'IF( TABLENAME.t3_id > 0, T2.f_id = T3.f_id, TABLENAME.ff_id = T2.ff_id )' ) ), ), 'recursive' => 0 ) );
Это более эффективный и понятный
IN BETWEEN
запрос вcakephp 2.x
$testing_log_device_site_name = $testingLogData['TestingLogDevice']['Siteid']; $conditions = array('TestingLogDevice.dateee BETWEEN ? and ?' => array($start_date, $end_date)); $results = $this->TestingLogDevice->find('all', array( 'fields'=>array('dateee','timeee','Siteid'), 'conditions'=>array($conditions, 'TestingLogDevice.Siteid'=>$testing_log_device_site_name) ) ); pr($results);