2016-01-11 161 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