如何在 Yii2 GridView 中使用 Multi Select Dropdown 执行 Filter

How to perform Filter using Multi Select Dropdown in Yii2 GridView

在这里我想把我的问题解释清楚,

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

我正在使用 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

但是这里不知道怎么写过滤代码

更新搜索视图:

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

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

而您的 select 它可能正在返回一个数组。因此,您的搜索将类似于:

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

查看更多查询示例 here

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

$this->状态是数组?

因此,您可以使用

<?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
                            ],
                    ]);
?>

尝试从 EmployeeSearch 规则中删除 'status'。 您不能以自动方式过滤此类字段。 或者你必须为状态列设置自定义过滤器值,像这样(你可以深入这个方向):

试试这个 link