使用 yii2 下拉列表全局过滤

Filter globally using yii2 dropdown list

我有显示模型数据的下拉列表,但是当我 select 它们时,它不会相应地过滤数据。

  <?php  $items = ArrayHelper::map(app\models\Facility::find()->all(),'facility_id' ,'facility_country');?>

   <?= $form->field($model, 'facility_country')->dropDownList($items)->label(false); ?>

上面提到的是搜索中的下拉列表 form.In filterSearch 模型 我已经像下面提到的代码一样使用了我的查询。

  $query->orFilterWhere(['like', 'facility_name', $this->facility_name])
        ->orFilterWhere(['like', 'facility_country', $this->facility_country]);

我能知道是什么问题吗?谢谢!!

您的 $items 变量的值来自您的 \app\models\Facility class,在具有以下格式的数组中:

[
    'facility_id' => 'facility_country',
    ...
]

当您将此数组与 dropDownList() 一起使用时,您是在将密钥 'facility_id' 发送到您的表单。

因此,在您的搜索模型中,您需要按 id 进行搜索,例如:

->orFilterWhere(['like', 'facility_id', $this->facility_country]);

或者您也可以按名称进行搜索(我猜这就是您想要的):

$items = ArrayHelper::map(app\models\Facility::find()->all(),'facility_country' ,'facility_country');

解决方案非常简单。问题是没有提交表单,这只是什么都不做。 我不只是提交表单,只是添加了 onchange 事件作为下面的代码。

<?php  $items = ArrayHelper::map(app\models\Facility::find()->all(),'facility_country' ,'facility_country');?>
    <?= $form->field($model, 'facility_country')->dropDownList($items,['class'=> 'col-sm-2 col-lg-2 col-xs-7 pull-left', 'style'=> 'height:34px;','onchange' => 'this.form.submit()'])->label(false);?>

感谢大家的帮助..