Добавляем Select2 в фильтр GridView Yii2

Допустим нам необходимо сделать фильтр по категориям. Структура нашей таблицы

// Таблица постов tbl_post
- id
- title
- description
- category
- user

// Таблица категории tbl_cat
- id
- name

// Наши таблицы связываются между собой по полям tbl_post.category -> tbl_cat.id

В модели Yii связь можно установить следующим образом

// Модель tbl_post например frontend/models/Post.php. Ниже приведенный метод необходимо вставить в класс.
public function getCategoryname()
{
	return $this->hasOne(Category::className(), ['id' => 'category']);
}

После прописанного метода нам будет доступен attribute categoryname

// Код view
<? 
echo GridView::widget([
	'dataProvider' => $dataProvider,
	'filterModel' => $searchModel,
	'columns' => [
		['class' => 'yii\grid\SerialColumn'],

		// 'id',
		
		[
			'attribute' => 'categoryname',
			'value' => 'categoryname.name',
			'filter' =>  Select2::widget([        
				'model' => $searchModel,
				'attribute' => 'categoryname',
				'data' => ArrayHelper::map(Category::find()->asArray()->all(), 'id', 'name'),
				'value' => 'categoryname.name',
				'options' => [
					'class' => 'form-control',
					'placeholder' => 'Выберите значение'
				],
				'pluginOptions' => [
					'allowClear' => true,
					'selectOnClose' => true,
				]
			])
		],
	]
]);
?>

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *