1

我有一个带有布尔值的模型,它是从这样的表生成的:

CREATE TABLE receivable (
    ...
    is_paid INTEGER DEFAULT NULL,
    ...
)

您应该只注意可能的 NULL 值。

我有一个 gii 生成的 Receivable.php-model 和一个简单的 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(或显示所有内容)。如何让用户仅显示具有空值的行?

任何帮助深表感谢!

4

1 回答 1

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;
        }
于 2013-05-20T07:42:12.117 回答