GridView and ArrayHelper::map одинаковый ключи

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
kreativ207
Сообщения: 9
Зарегистрирован: 2015.06.06, 17:06

GridView and ArrayHelper::map одинаковый ключи

Сообщение kreativ207 »

Привет Всем
Нужно сделать фильтр по родительской категории:
Menu::find()->asArray()->all()
Получается массив
[0]=>
array(4) {
["id"]=>
string(1) "2"
["title"]=>
string(14) "Главная"
["link"]=>
string(10) "site/index"
["parent_menu"]=>
string(1) "0"
}
[1]=>
array(4) {
["id"]=>
string(1) "3"
["title"]=>
string(19) "О компании"
["link"]=>
string(10) "site/about"
["parent_menu"]=>
string(1) "0"
}
[2]=>
array(4) {
["id"]=>
string(1) "4"
["title"]=>
string(12) "Услуги"
["link"]=>
string(14) "services/index"
["parent_menu"]=>
string(1) "0"
}
[3]=>
array(4) {
["id"]=>
string(1) "5"
["title"]=>
string(35) "Юридические услуги"
["link"]=>
string(18) "services/juridical"
["parent_menu"]=>
string(1) "3"
}
[4]=>
array(4) {
["id"]=>
string(1) "6"
["title"]=>
string(31) "Оценочные услуги"
["link"]=>
string(18) "services/valuation"
["parent_menu"]=>
string(1) "3"
}
[5]=>
array(4) {
["id"]=>
string(1) "7"
["title"]=>
string(16) "Контакты"
["link"]=>
string(13) "site/contacts"
["parent_menu"]=>
string(1) "0"
}
}

Нужно в GridView вывести в фильтр все (6 из массива выше "parent_menu" => "title"),
делаю так
'filter' => ArrayHelper::map(Menu::find()->asArray()->all(), 'parent_menu', 'title'),
получается только 2
array(2) {
[0]=>
string(16) "Контакты"
[3]=>
string(31) "Оценочные услуги"
}
понимаю что одинаковые ключи и они переписываются, как правильно сделать?
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: GridView and ArrayHelper::map одинаковый ключи

Сообщение Loveorigami »

Index By по уникальному полю
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: GridView and ArrayHelper::map одинаковый ключи

Сообщение andku83 »

вместо этого:

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

'filter' => ArrayHelper::map(Menu::find()->asArray()->all(), 'parent_menu', 'title'),
сделать:

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

'filter' => Menu::find()->select(['title', 'id'])->indexBy('id')->column(),
Ответить