Добавить несколько виджетов 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 отображается только для одного драйвера (первый драйвер имеет зоны). У других нет виджета, даже если у них есть зоны в таблице отображения зон драйвера. Есть идеи?