Yii2:使用 kartik 日期范围选择器在 gridview 中进行过滤

2022-01-07 00:00:00 filter php yii2 gridview

我正在尝试在 gridview 中使用 Kartik 日期范围选择器进行过滤.

我有一列 date_time 字段作为 discharge_date,小部件在 gridview 中显示良好,但过滤根本不起作用.

这是我在 Gridview 中的代码:

<预><代码>['属性'='放电日期','值'=>'放电日期','过滤器类型' =>GridView::FILTER_DATE_RANGE,'filterWidgetOptions' =>(['模型'=>$模型,'属性'='放电日期','presetDropdown'=>TRUE,'convertFormat'=>真,'插件选项'=>['格式'=>'Y-m-d','打开'==>'左']])],

我哪里出错了?

解决方案

您需要解析 Search 模型中的放电日期过滤器值.作为示例,以下代码将采用过滤器值并将其拆分为破折号,并将 $start_date 和 $end_date 添加到 $query 字符串中(即在 if (!$this->validate()) 之后添加它){):

if ( !is_null($this->discharge_date) && strpos($this->discharge_date, ' - ') !== false ) {列表($start_date,$end_date)=explode(' - ',$this->discharge_date);$query->andFilterWhere(['between', 'data_date', $start_date, $end_date]);$this->discharge_date = null;}

I am trying to use the Kartik Date Range picker for filter in gridview.

I have a column date_time field as discharge_date, the widget is showing fine in the gridview but the filtering is not working at all.

This is my code in the Gridview:

[
                'attribute'=>'discharge_date',
                'value'=>'discharge_date',                
                'filterType' => GridView::FILTER_DATE_RANGE,
                'filterWidgetOptions' =>([
                'model'=>$model,
                'attribute'=>'discharge_date',
                'presetDropdown'=>TRUE,                
                'convertFormat'=>true,                
                'pluginOptions'=>[                                          
                    'format'=>'Y-m-d',
                    'opens'=>'left'
                ]
            ])

            ],

Where I am going wrong?

解决方案

You need to parse the discharge_date filter value in your Search model. As an example the following code will take the filter value and split it on the dash and add the $start_date and $end_date to the $query string (i.e. add it after if (!$this->validate()) {):

if ( ! is_null($this->discharge_date) && strpos($this->discharge_date, ' - ') !== false ) {
    list($start_date, $end_date) = explode(' - ', $this->discharge_date);
    $query->andFilterWhere(['between', 'data_date', $start_date, $end_date]);
    $this->discharge_date = null;
}

相关文章