GridView filter, Query Builder

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
psevdo
Сообщения: 96
Зарегистрирован: 2013.04.10, 11:10

GridView filter, Query Builder

Сообщение psevdo »

Здравствуйте. Есть на странице GridView:

Код: Выделить всё

GridView::widget([
	'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
		'columns' => [
			['class' => \yii\grid\SerialColumn::class],
			[
				'label' => 'Организация',
				'attribute' => 'element_name'
			],
		]
])
В SearchModel есть следующий код:

Код: Выделить всё

$query = new \yii\db\Query;
$query
	->select('*')
	->from('elements')
	->orderby('element_name');
		
$dataProvider = new ActiveDataProvider([
	'db' => Yii::$app->db2,
        'query' => $query,
]);
		
return $dataProvider;
Как сделать фильтр в GridView. Сейчас это строки нет.
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: GridView filter, Query Builder

Сообщение yiijeka »

Фильтр появиться в GridView, если он будет доступен в filterModel, т.е. в $searchModel

Для того, чтобы он там стал доступен, должен быть атрибут у $searchModel и он должен быть публичным.

в SearchModel пишите

public $element_name;

и в rules описываете, каким он должен быть

public function rules() { return [['element_name', 'string']]; }

Теперь GridView увидет что у filterModel есть публичное свойство и оно безопасное, т.е. имеет валидацию. Поэтому он её отобразит в заголовке таблицы.

Когда вы впишите в фильтр значение, то ничего не отфильтруется потому, что надо обработать это свойтво через ваш запрос Query

Перед return $dataProvider;
пишите
$query->andFilterWhere(['like', 'element_name', $this->element_name])

После этого должно всё заработать.
psevdo
Сообщения: 96
Зарегистрирован: 2013.04.10, 11:10

Re: GridView filter, Query Builder

Сообщение psevdo »

Получилось. Большое спасибо.
Ответить