Yii 如何将CDATA列筛选器应用于CGridView,使其仅显示空值的行?
我有一个带有布尔值的模型,由如下表生成:Yii 如何将CDATA列筛选器应用于CGridView,使其仅显示空值的行?,yii,Yii,我有一个带有布尔值的模型,由如下表生成: CREATE TABLE receivable ( ... is_paid INTEGER DEFAULT NULL, ... ) $dataProvider = $model->search(); $dataProvider->pagination = ['pageSize'=>20]; $this->widget('zii.widgets.grid.CGridView', array( 'd
CREATE TABLE receivable (
...
is_paid INTEGER DEFAULT NULL,
...
)
$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']
),
);
您应该只注意可能的空值
我有一个gii生成的received.php-model和一个简单的CGridView,如下所示:
CREATE TABLE receivable (
...
is_paid INTEGER DEFAULT NULL,
...
)
$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.
'filter'=>['1'=>'PAID','0'=>'0',null=>'null']//这将显示所有记录。
'filter'=>['1'=>'PAID','0'=>'0',''=>'null']//这也会显示所有记录。
'filter'=>['1'=>'PAID','1'=>'null或zero']//这仅显示0条记录。
嗯,现在我不知所措。是否有任何方法可以使用CDATA Column.filter允许用户筛选空值?(仅显示“已付款”==null的行)
编辑:值可以是1,0或NULL,但筛选器只能应用于1或0(或显示所有内容)。如何让用户只显示空值的行?
非常感谢您的帮助 这是一种方法
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' ),
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;
}
或者类似的事情
2.is_paid:boolean
3.'filter' => CHtml::listData(UserRegistry::model()->findAll(), 'id_user_registry', 'firstname' ),
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;
}
在上面的例子中,我在db表中有这些值
或者类似的事情
2.is_paid:boolean
3.'filter' => CHtml::listData(UserRegistry::model()->findAll(), 'id_user_registry', 'firstname' ),
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;
}
对于模型中的上述示例,您将有如下内容
2.is_paid:boolean
3.'filter' => CHtml::listData(UserRegistry::model()->findAll(), 'id_user_registry', 'firstname' ),
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;
}
>数组('0'=>Yii::t('app','No'),'1'=>Yii::t('app','Yes'))。这适用于1和0。但是如何将空值作为目标?值可以是1,0或NULL,但我只能筛选1,0或全部。我希望用户能够使用过滤器仅显示具有空值的行。我现在会研究你的其他解决方案,但我想你错过了我的问题。对不起,不清楚!我现在编辑了标题。你的问题是正确的,我没有注意到,我错过了带有null的部分,请尝试在CgridView=中查看此->处理null值,如果仍然存在问题,请告诉我为什么要使用null作为值?在创建条目时将其默认为0,或者如果您的条目需要2种以上的状态,则将记录int并使用0,1,2作为状态。使用null作为过滤选项非常棘手,这是因为等待时间太长。我接受这个答案(因为这是唯一的答案)。正如Tavi所说,我相信正确的解决方案是从一开始就避免空值。非常感谢。