Yii CActiveDataProvider按日期范围标准过滤

时间:2011-12-21 03:18:20

标签: database yii criteria

我正在使用Yii 1.1.8。尝试在控制器操作中按日期限制$ dataProvider源。我想过滤数据集以仅显示最近2年的条目,但无法使其生效。

我在事件表中有两条记录,其中一条记录是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'),
                    ),
                ));

全部返回“未找到结果”。我究竟做错了什么?它似乎应该是简单的东西,但我很难过。

3 个答案:

答案 0 :(得分:9)

创建新的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));

答案 1 :(得分:0)

那里你有报价问题;日期应包含在单引号中。 试试这个:

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

答案 2 :(得分:0)

您可以使用:

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