如何使用Yii2 GridView中的多选下拉列表执行过滤

时间:2016-02-15 07:52:41

标签: php yii2 dropdown

我想清楚地解释一下我的问题,

我正在尝试执行多选下拉过滤器,在此多选过滤器之前我有一个基本过滤器。

使用kartik-v下拉扩展程序

的search.php

<?php
     $status = ArrayHelper::map(Status::find()->all(),'id','status');
     echo $form->field($model, 'status')->widget(Select2::classname(), [
                            'data' => $status,
                            'language' => 'en',
                            'options' => [
                            'placeholder' => 'Select Status..',
                            'multiple' => true
                            ],
                            'pluginOptions' => [
                                'allowClear' => true
                            ],
                    ]);
?>

claimsSearch.php

$query->andFilterWhere([
            'status' => $this->status
        ]);

如果我尝试上面的代码,则会出现以下错误

Array to string conversion

但是我不知道如何编写过滤器代码。

更新searchview: search view snapshot

3 个答案:

答案 0 :(得分:4)

尝试删除状态&#39;来自EmployeeSearch规则。 你无法过滤这种现场自动方式。 或者您必须为状态列设置自定义过滤器值,如下所示(您可以深入了解此方向):

How can I use a simple Dropdown list in the search box of GridView::widget, Yii2?试试这个链接

答案 1 :(得分:0)

您没有在该窗口小部件中调用模型。你应该像这样使用:

echo $form->field($mySearchModel, 'state_10')->widget(Select2::classname(), [
    'data' => $status,
    'options' => [
        'placeholder' => 'Select Status ...',
        'multiple' => true
    ],
]);

你选择它可能会返回一个数组。所以,你的搜索将是这样的:

$query->andFilterWhere([
    'status' => ('in', 'status', $this->status)
]);

查看更多查询示例here

如果该解决方案不起作用,我会在您的视图中为您做var_dump($yourModel->status),只是为了检查返回的内容。

答案 2 :(得分:0)

$ this-&gt; status是数组吗?

所以,你可以使用

<?php
 $status = ArrayHelper::map(Status::::model()->findAllByAttributes(array("id"=>$status));(),'id','status');
 echo $form->field($model, 'status')->widget(Select2::classname(), [
                            'data' => $status,
                            'language' => 'en',
                            'options' => [
                            'placeholder' => 'Select Status..',
                            'multiple' => true
                            ],
                            'pluginOptions' => [
                                'allowClear' => true
                            ],
                    ]);
?>