2015-02-09 6 views
0

Я пытаюсь создать функцию получения заявления, и у меня есть некоторые проблемы, определяющие диапазон дат.Получить данные, основанные на году и месяце в cakephp

Данные будут передаваться с помощью метода GET в следующем формате:? год = гггг & месяц = ​​мм Соответствующий столбец таблицы имеет DATETIME тип (2012-02-01).

Я проверил класс TimeHelper и, в частности, TimeHelper::daysAsSql($begin, $end, $fieldName, $timezone = NULL), но я не уверен, применим ли он для этого случая.

Я думал, могу ли я создать дату в формате Y-m, используя две переменные год и месяц, а затем использовать его в условиях для извлечения данных, но я уверен, что есть более эффективный и правильный способ. Может ли кто-нибудь помочь?

$user_id = $Client['Client']['id']; 
    $year = $this->request['url']['year']; 
    $month = $this->request['url']['month']; 
    //$date_created = date('Y-m'); 


    if (!empty($user_id) && (!empty($date_created))) { 


     $Reports = $this->Report->find('all', array(
     'fields' => array('amount','currency','date_created','invoice_no'), 
     'conditions' => array(
      'Report.client_id'=> $user_id, 
      'Report.date_created >=' => $date_created, 
      'Report.date_created <=' => $date_created 

      ), 
     ) 
    ); 
+0

Основываясь на условиях в образце, он будет работать только в том случае Report.date_created равен $ DATE_CREATED. Потому что он не может быть меньше, чем, и больше в одно и то же время. Вы имели в виду наличие других условий, таких как date_start и date_end? –

ответ

1

МЕСЯЦ (dateColumn) Возвращает целое число, представляющее месяц указанной даты.

YEAR (dateColumn) Возвращает целое число, которое представляет год указанной даты.

использование InCakephp в

$user_id = $Client['Client']['id']; 
    $year = $this->request['url']['year']; 
    $month = $this->request['url']['month']; 
    //$date_created = date('Y-m'); 


    if (!empty($user_id) && (!empty($date_created))) { 


     $Reports = $this->Report->find('all', array(
       'fields' => array('amount','currency','date_created','invoice_no'), 
       'conditions' => array(
         'Report.client_id '=> $user_id, 
         'MONTH(date_created) >='=> $month, 
         'YEAR(date_created) <=' => $year 

       ), 
     ) 
     ); 
+0

Спасибо за ваш ответ, очень полезно. Таким образом, используя MONTH и YEAR из столбца даты, я могу написать некоторые как в cakephp? SELECT * FROM 'Report' WHERE strftime ('% m',' date_created') = $ month И strftime ('% y', 'date_created') = год – abcy122

+0

STRFTIME() в SQLite аналогичен DATE_FORMAT() в MySQL с измененными параметрами. Поскольку% d и% m сопоставляются с одним и тем же в обоих, ваше выражение может быть просто записано как; WHERE DATE_FORMAT (date_created, '% m') = ....... – Supravat

 Смежные вопросы

  • Нет связанных вопросов^_^