我正在使用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'),
),
));
全部返回“未找到结果”。我究竟做错了什么?它似乎应该是简单的东西,但我很难过。
答案 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);