我有一个带有布尔值的模型,从这样的表生成:
CREATE TABLE receivable (
...
is_paid INTEGER DEFAULT NULL,
...
)
您应该只注意可能的NULL值。
我有一个gii生成的Receivable.php模型和一个简单的CGridView,如下所示:
$dataProvider = $model->search();
$dataProvider->pagination = ['pageSize'=>20];
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'filter'=>$model,
'columns'=>array(
'id',
[
'name'=>'is_paid',
'type'=>'raw',
'value'=>'($data->is_paid==1)?"PAID":"";',
'filter'=>['1'=>'PAID', '0'=>'0']
],
'someothercolumn',
['class'=>'CButtonColumn']
),
);
到目前为止应该有意义吗?它确实可以正常工作,只有一个小问题 - 我也想允许过滤空值!
'filter'=>['1'=>'PAID', '0'=>'0', null=>'null'] // This shows all records.
'filter'=>['1'=>'PAID', '0'=>'0', ''=>'null'] // This also shows all records.
'filter'=>['1'=>'PAID', '<>1'=>'null or zero'] // This shows 0-records only.
嗯,现在我不知所措。有什么办法可以使用CDataColumn.filter来允许用户过滤空值吗? (仅显示'is_paid'== null)的行
编辑:值可以是1,0或NULL,但过滤器只能应用于1或0(或显示所有内容)。如何让用户只显示带空值的行?
非常感谢任何帮助!
答案 0 :(得分:2)
这是你可以做到的一种方式
1.'filter' => array('0' => Yii::t('app', 'No'), '1' => Yii::t('app', 'Yes')),
或类似的东西
2.is_paid:boolean
或类似的东西
3.'filter' => CHtml::listData(UserRegistry::model()->findAll(), 'id_user_registry', 'firstname' ),
在上面的例子中,我有一个db表中的值
或类似的东西
4.'filter' => Lookup::items('option'),
对于模型中的上述示例,您将拥有类似这样的内容
4. public static function items($type, $code)
{
if(!isset(self::$_items[$type]))
self::loadItems($type);
return isset(self::$_items[$type][$code]) ? self::$_items[$type][$code] : false;
}
private static function loadItems($type)
{
self::$_items[$type]=array();
$models=self::model()->findAll(array(
'condition'=>'type=:type',
'params'=>array(':type'=>$type),
//'order'=>'position',
));
foreach($models as $model)
self::$_items[$type][$model->code]=$model->name;
}