2011-12-21 93 views
0

我正在使用Yii 1.1.8。嘗試在控制器操作中按日期限制$ dataProvider源。我想過濾數據集以僅顯示最近2年的條目,但無法使其正常工作。Yii CActiveDataProvider按日期範圍條件篩選

我在事件表中得到了兩個記錄,其中一個日期是2個月前,另一個日期是4年前。

嘗試:

$dataProvider=new CActiveDataProvider('Event', array(
        'criteria'=>array(
         'condition'=>'date >= '.date('Y-m-d', strtotime('-2 years')). ' AND date <='. date('Y-m-d'), 
        ), 
       )); 

$dataProvider=new CActiveDataProvider('Event', array(
        'criteria'=>array(
         'condition'=>'date >= '.date('Y-m-d', strtotime('-2 years')), 
        ), 
       )); 

$dataProvider=new CActiveDataProvider('Event', array(
        'criteria'=>array(
         'condition'=>'date BETWEEN '.date('Y-m-d', strtotime('-2 years')).' AND '. date('Y-m-d'), 
        ), 
       )); 

全部返回了 「沒有找到結果」。我究竟做錯了什麼?它似乎應該是簡單的東西,但我很難過。

+1

它確實是一件簡單。我錯過了引號......'condition'=>'date> =''.date('Ym-d',strtotime(' - 2 years'))。'「',作品 – T1000 2011-12-21 04:54:56

回答

7

創建新的CDbCriteria並將標準對象傳遞給CActiveDataProvider的第二個參數會更容易。

http://www.yiiframework.com/doc/api/1.1/CDbCriteria#addBetweenCondition-detail

$criteria = new CDbCriteria; 
$criteria->addBetweenCondition($column, $valueStart, $valueEnd, 'AND'); 

$dataProvider=new CActiveDataProvider('Event', array('criteria'=>$criteria)); 
+0

我正在嘗試這個,但它不工作爲了我。我有一個名爲'last_updated'的數據庫中的日期字段,現在我想在兩個日期之間進行比較。我將如何完成'_search.php'頁面來合併這個? – shorif2000 2013-01-04 17:12:30

+1

您需要將新輸入添加到搜索頁面,然後將這些值傳遞給下面的方法。 ... $ criteria-> addBetweenCondition('last_updated',$ _POST ['valueStart'],$ _POST ['valueEnd'],'AND'); 如果您正在使用分頁,請確保您將表單方法設置爲'GET' – aCodeSmith 2013-02-26 15:31:11

0

你有一個報價問題存在;日期應該包含在單引號中。 試試這個:

$dataProvider=new CActiveDataProvider('Event', array(
        'criteria'=>array(
          'condition'=>"date BETWEEN '".date('Y-m-d', strtotime('-2 years'))."' AND '" . date('Y-m-d') . "'", 
         ), 
        )); 
0

你可以用它來:

$criteria = new CDbCriteria; 
$criteria->condition = "date_start >= '$date_start' AND date_end <= '$date_end'"; 
$model = TemporadaAlta::model()->find($criteria);