2016-01-11 120 views
0

请帮我解决以下问题。Yii2 Gridview DropDownList多选择筛选器

我有一个数据页面显示gridview。有一列'状态'。我需要通过此列值下拉筛选器。

对于我的在网格视图列我设置以下的过滤器值:

'filter' => Html::activeDropDownList($searchModel, 'status', 
    Accounts::getStatusList(), ['class' => 'form-control', 'multiple' => true]), 

下拉滤波器正确显示。但是无论我选择多少选项,搜索模型都只能获得一个只有一个值的数组。

我已经尝试了很多方法,但没有找到任何解决方案。谢谢。

+0

请给我你'的搜索方法代码' –

+0

我的过滤器正常工作时,下拉列表不是多个 - 所以亲blem不在过滤器中。据我所知,searchmodel代码在两种情况下都必须是平等的。因为Yii在serchmodel $ query-> andFilterWhere([status] => $ this-> status, ])中的where子句中自动检查$ this-> status(array on array) 因此,这两种变体自动必须正常工作。 – bigferumdron

+0

我遇到同样的问题。你说在运行'composer update'后修复并删除资产。我做了同样的事情,但没有奏效。你能否用你的视图代码(gridview)写一个答案?每次我点击(按住ctrl)多个选项或同时选择全部,它只搜索最后一个。 – Clyff

回答

0

请仔细阅读。 http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/

和代码必须是:

搜索模式

/* your search attribute */ 
public $stats; 

/* setup rules */ 
public function rules() { 
    return [ 
    /* your other rules */ 
    [['stats'], 'safe'] 
    ]; 
} 

public function search($params) { 

/** some code **/ 

    $this->load($params); 

/** some code **/ 

if ($this->stats != null && count ($this->stats)>0) { 
//this bad practic, but I don't find right way use " IN " 
    $query->andFilterWhere("status IN (".implode(',',$this->stats).")"); 
} 

} 

视图

'filter' => Html::activeDropDownList($searchModel, 'stats', 
    Accounts::getStatusList(), ['class' => 'form-control', 'multiple' => true]), 
+0

谢谢。但是这个代码不起作用。你可以尝试一下。 在searchModel params加载数组只有一个值 – bigferumdron

+0

谢谢。但是这个代码不起作用。你可以尝试一下。 当SearchModel加载参数时,列状态只有一个数组。 http://prntscr.com/9xzu8i截图。 我认为在gridview的JavaScript问题... PS。 (“status”=> $ this-> status)$ query-> andFilterWhere(“status IN(”.implode ; ActiveRecord自动理解$ this-> status是数组,并为其添加IN运算符。 – bigferumdron

+1

它的工作原理!我已经完成了作曲家更新,而不是删除所有资产,并开始工作。 – bigferumdron