Добавить несколько виджетов Select2 внутри столбца gridview (не как столбец фильтра) в YII2

Здравствуйте, я пытаюсь добавить виджет select2 в столбцы gridview для каждого драйвера в Yii2. Сетка предназначена для модели водителя. У одного водителя может быть несколько зон. Как на картинке ниже:

Вот сетка:

Я создал отношение в модели драйвера:

public function getZones()
{
    return $this->hasMany(Zone::className(), ['id' => 'zone_id'])
        ->viaTable('driver_zone_mapping', ['driver_id' => 'id']);
}

и вот код столбца Select2 Grid:

 [
            'label' => 'Zones',
            'format' => 'raw',
            'value' => function ($model) {
                return Select2::widget([
                    'model' => $model,
                    'attribute' => 'zones',
                    'value' => $model->zones,
                    'data' => ArrayHelper::map(Zone::find()->asArray()->all(), 'id', 'zone'),
                    'options' => [
                        'placeholder' => 'Select Zone ...',
                        'class' => 's2-tog-button',
                        'data-id' => $model->id,
                        'multiple' => true,
                    ],
                    'pluginOptions' => [
                        'tags' => true,
                    ],
                ]);
            }
        ],

Контроллер Действие:

public function actionTest()
{
    $searchModel = new DriverSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    $dataProvider->pagination->pageSize = 50;

    return $this->render('test', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

Вот функция поиска модели:

public function search($params)
{
    $query = Driver::find();

    $query->joinWith(['zones']);
    // add conditions that should always apply here

    // add conditions that should always apply here

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    $this->load($params);

    if (!$this->validate()) {
        // uncomment the following line if you do not want to return any records when validation fails
        // $query->where('0=1');
        return $dataProvider;
    }

    // grid filtering conditions
    $query->andFilterWhere([
        'id' => $this->id,
        'presence' => $this->presence,
        'priority' => $this->priority,
        'created_at' => $this->created_at,
    ]);

    $query->andFilterWhere(['like', 'name', $this->name])
        ->andFilterWhere(['like', 'visible_name', $this->mobile])
        ->andFilterWhere(['like', 'mobile', $this->mobile])
        ->andFilterWhere(['like', 'other', $this->other]);

    return $dataProvider;
}

Проблема в том, что виджет select2 отображается только для одного драйвера (первый драйвер имеет зоны). У других нет виджета, даже если у них есть зоны в таблице отображения зон драйвера. Есть идеи?

0 ответов

Другие вопросы по тегам