我正在尝试找到一种方法,在包含整数值的列中使用大于/小于运算符来过滤 CGridView 结果。 我可以使用“过滤器”参数吗?或者我需要在模型文件中创建一个新方法吗?
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'event-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns' => array(
array(
'name'=>'score_d_min',
'header'=>'D',
'value'=>'$data->score_d_min',
'filter'=> , // not really sure what to put in here
),
),
));
最佳答案
您可以按照以下步骤实现此目标:
1- 将两个属性添加到您的模型
public $compare; //compare value
public $compareOp; //compare operator, for example [>,<,>=,<=]
2- 将以上安全属性添加到您的验证规则中
array('compare,compareOp,...', 'safe', 'on' => 'search'),
3- 在您的 GridView
中添加以下列
array(
'name'=>'score_d_min',
'header'=>'d',
'value'=>'$data->score_d_min',
'filter'=> CHtml::dropDownList('User[compareOp]', $model->compareOp,
array('>'=>'>','<'=>'<','>='=>'>=','<='=>'<=','='=>'='),array('style'=>'width:50px;')) .
CHtml::textField('User[compare]',$model->compare,array('style'=>'width:100px;'))
),
4- 修改模型的 search()
方法
$criteria->compare('score_d_min', $this->compareOp .$this->compare);
现在,您有如下所示的内容(图片看起来与您的不同,因为我正在测试用户表上测试它):
在图片中,它比较所需的列,如下所示:
column >= 2
结果(在我的机器中,我有 3 个用户,其用户 id 为 (1,2,3)。因此它只显示 id 为 2,3 的用户):
或者:
注释:
- 我为
>
编写了代码,<
,>=
,<=
和=
运算符 - 上面的代码只是一个工作示例。您可能需要对其进行自定义。
关于php - Yii CGridView 使用大于/小于运算符进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532777/