【发布时间】:2016-03-07 20:07:00
【问题描述】:
我想向网格中的下拉过滤器添加一个 aggregating 选项(示例中为“所有选项”),它涵盖所有其他选项,看起来像这个:
All options
Option1
Option2
Option3
...
我试过这种方式:
网格:
'filter' => ['All options', yii\helpers\ArrayHelper::map(app\models\RelatedModel::find()->all(), 'id', 'name'),]
模型搜索:
if ($this->RelatedModelId == 'All options') {
$query->andFilterWhere(['in', 'RelatedModelId', \yii\helpers\ArrayHelper::getColumn(RelatedModel::find()->all(), 'id')]);
} else {
$query->andFilterWhere(['RelatedModelId' => $this->RelatedModelId ,]);
};
它有效(也许不是世界上最漂亮的解决方案,但目前对我来说还可以)。唯一让我感到不安的是下拉列表中的0(有时是 1,取决于我如何更改代码):
All options
0
Option1
Option2
Option3
...
我知道这是因为过滤器中的括号 [] ('filter' => [...]),但目前这是我实现所需功能的唯一方法。我不知道如何使它在没有括号的情况下工作。有没有一种简单的方法(可以在某个地方添加一个额外的小选项)不显示这个0 还是我必须完全不同?看起来像这样并不是什么大问题,但最好不要看到它。或者我可以把这个All 放到map 函数中吗?
'filter' => yii\helpers\ArrayHelper::map(array_merge(['All options', app\models\RelatedModel::find()->all()]), 'id', 'name'),
我也尝试过array_merge(),但没有成功。
有什么想法吗?提前致谢!
【问题讨论】:
标签: arrays gridview drop-down-menu filter yii2