如何在 Yii2 GridView::widget 的搜索框中使用带过滤功能的简单下拉列表?

How can I use a simple Dropdown list with filtering in the search box of GridView::widget, Yii2?

我有两个 tables "attendance",属性为 idstatusdate 和 "staff"。 staff_id作为考勤的外键table。在 _form.php 的出勤率中,我使用了

<?= $form->field($model, 'status')->dropDownList([ 'Present' => 'Present', 'Absent' => 'Absent', 'Leave' => 'Leave',], ['prompt' => 'Select status']) ?> 

用于下拉菜单。现在我想在 gridview 搜索列中使用 属性 过滤和搜索下拉菜单。我希望我的 gridview 被我拥有的下拉列表过滤。因此,当我从下拉列表中选择一个值时,它应该根据所选值进行搜索。非常感谢任何帮助。

在您的 cgridview 中添加此代码,

array(
        'name'=>'name_of_field',
        'value'=>function($data){
                echo $data->relation_name->name;
            },
        'filter'=>CHtml::listData(Model::model()->findAll('condition_if_any'),'id','name'),
        'htmlOptions' => array('style' => "text-align:center;"),
    ),

试试这个在过滤器中添加下拉列表。

[
        'attribute' => 'name_of_field',
        'value' => function($model){
                      return $model->relationName->name;
                   },
        'filter' => \yii\helpers\ArrayHelper::map(Model::find()->all(), 'id', 'name'),
],

我想你的问题是关于状态字段的

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        ........
        [
           'attribute' => 'status',
           'label' => 'Status',
           'filter' => [ 'Present' => 'Present', 'Absent' => 'Absent', 'Leave' => 'Leave',]
        ],
        ......

自动从表中获取数据:

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            [
                'attribute' => 'deptname',
                'value' => 'deptname',
                'filter'=>ArrayHelper::map(Attendance::find()->joinWith('staff')->orderBy('id')->all(), 'status', 'status'),
            ],
        ]
    ]);
?>