2015-02-09 68 views
0

我正在尝试创建get语句函数,并且在定义日期范围时遇到了一些问题。 ?在cakephp中检索基于年份和月份的数据

的数据将通过以下列格式get方法传递:年= YYYY &一个月=毫米 表的相关列有日期时间型(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在那里? – 2015-02-10 01:16:37

回答

1

(dateColumn)返回表示指定日期的月份的整数。

年份(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 AND strftime('%y','date_created')= year – abcy122 2015-02-10 09:11:46

+0

SQLite中的STRFTIME()类似于DATE_FORMAT具有反向参数的MySQL。 由于%d和%m映射到两者中的相同事物,因此您的表达式可以简单地写为; WHERE DATE_FORMAT(date_created,'%m')= ....... – Supravat 2015-02-10 16:34:52