@schwabsergey

YII2 Как в выпадающем списке Html::activeDropDownList() задать value для options?

Смысл в том, что мне нужно сделать фильтр в колонке виджета GridView. Фильтр должен представлять из себя выпадающий список, элементы которого - повторяющиеся данные из колонки. Информация в колонке - данные из столбца таблицы БД, которые в свою очередь попадают в БД из формы, которую отправляет пользователь. (К примеру, как гостевая книга и мне нужно сделать фильтр по именам выпадающим списком)
Я использую Html::activeDropDownList() для построения данного списка. В качестве массива в activeDropDownList() передаю данные из таблицы БД при помощи ArrayHelper::getColumn() вот код:
//формирую массив, выбрав из таблицы БД все группы повторяющихся данных 
$Arr = $model::find()->select('email')->groupBy('email')->asArray()->all();
//добавляю в фильтр по колонке список
'filter' => Html::activeDropDownList($model, 'name', ArrayHelper::getColumn($Arr,'name'), ['class'=>'form-control', 'prompt' => 'Выбрать', 'value' => $model->name, ]),

Список появляется и работает, но в адресную строку для обработки поисковой модели передается значение value (0, 1, 2 и т.д.), а не названия данных в колонке и соответственно такой фильтр ничего не находит.
Вот у меня и вопрос, можно ли передавать в value нужные мне значения вместо цифр или я изначально не правильно делаю фильтр? Или необходима еще одна отдельная таблица в БД для имен и тогда нужно будет использовать их ID?
  • Вопрос задан
  • 1950 просмотров
Пригласить эксперта
Ответы на вопрос 1
sanchezzzhak
@sanchezzzhak
Ля ля ля...
Html:active*
значение берется из модели, если значение не берется из модели
1 модель пуста
2 у модели не объявлены правила для данного свойства ( достаточно добавить в rules [['имя свойства'],safe']

upd
В данном случаи рекомендую сделать так 1)
'filter' => \yii\helpes\ArrayHelper::map($items,'phone','name');

что бы значение сохранялось при обновлении грида
у грида должен быть задан filterModel + свойство также должно быть описано в правилах у модели.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы