Подмена выводимого списка Select2

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
dymsonn
Сообщения: 77
Зарегистрирован: 2018.06.13, 15:37

Подмена выводимого списка Select2

Сообщение dymsonn »

Здравствуйте. Вопрос прост. Хочу в выпадающем списке kartik/Select2 вместо правильных (из базы) значений выводить кастомные.
Есть две маленькие таблицы:

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

table1
id | name
1 | Перый
2 | Второй
3 | Третий

table2
id | name | id_table1
тут свои значения
Вывожу в виде вторую таблицу. Поле id_table1 вывожу через Select2 выпадающим списком. В нем выводится три строки. Вот в этих строках хочу вместо Первый, Второй, Третий выводить Один, Два, Три.
В форме:

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

->Select2(){
data => $model->replace;
}
В модели:

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

public function getReplace(){
$data = ArraHelper::map(Table1::find()->all(), 'id', 'name');
// тут искал какую то замену php функции array_replace
// ArrayHelper::merge(массив1, массив2) производит слияние
foreach ($data as $key=>$value){
switch ($value) {
case 'Первый':
$value = 'Один';
break;
case 'Второй':
$value = 'Два';
break;
}
$result = [$key=>$value];
}
return $result;
}
Switch выводит только последний case.
Мне нужно заменить отображение только в форме, в базу должны записываться правильные id из table1.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Подмена выводимого списка Select2

Сообщение unknownby »

Попробуй так может, главное правильно сделать в select

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

$data = ArraHelper::map(Table1::find()->select(['id' => 'table1.id', 'name' => 'table2.name'])->joinWith('table2', false, 'LEFT JOIN')->asArray()->all(), 'id', 'name');
dymsonn
Сообщения: 77
Зарегистрирован: 2018.06.13, 15:37

Re: Подмена выводимого списка Select2

Сообщение dymsonn »

Этот код выведет имена из второй таблицы с id из первой как я понял. А мне нужны имена не из базы, а что бы я в коде из прописал сам.
Я подобное реализовывал, но без связей между таблицами. Была одна таблица, и в поле могло быть 0 и 1, а вместо них я выводил не и да соответственно. Как то так:

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

->Select2(){
data => [
0 => 'Нет',
1=>'Да'
]}
А с двумя таблицами такое не получается никак.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Подмена выводимого списка Select2

Сообщение unknownby »

Таблица1 и Таблица2 совпадают по количеству записей?
Или выводится информация из Таблица1, а в Таблица2 может быть не 10 записей (которые есть в Таблица1), а только 2-3 штуки?
Если нужно только пару штук, тогда решение с ArrayHelper::merge
1. Выбираем весь массив
2. Создаем свой массив, где ключ = идентификатор записи из первого массива, значение = нужное нам значение
3. Объединяем эти массивы.
На выходе получится, что наши значения заменятся на новые.
Первый пример тут
dymsonn
Сообщения: 77
Зарегистрирован: 2018.06.13, 15:37

Re: Подмена выводимого списка Select2

Сообщение dymsonn »

Да, это то что нужно. Чуть чуть я недокрутил.
В Таблице1 3 записи всегда, в Таблица2 сколько угодно.
Попробовал, и не получилось, как я предполагал, id же числовые, а они не перезаписываются, а дозаписываются. Приводить id к строке...
dymsonn
Сообщения: 77
Зарегистрирован: 2018.06.13, 15:37

Re: Подмена выводимого списка Select2

Сообщение dymsonn »

unknownby писал(а): 2020.10.19, 16:57 Первый пример тут
А вот как раз Пример2 объединение массивов оператором "+" работает как нужно.
dymsonn
Сообщения: 77
Зарегистрирован: 2018.06.13, 15:37

Re: Подмена выводимого списка Select2

Сообщение dymsonn »

А вообще в php есть функция array_combine(). Вот она делает в точности то что мне нужно. Берет идентификаторы первого массива (id из Таблицы1) и присваивает им значения второго массива (мой массив с кастомными значениями). На yii2 я так понимаю нет возможности воспользоваться этой функцией?
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Подмена выводимого списка Select2

Сообщение skynin »

dymsonn писал(а): 2020.10.20, 11:56 А вообще в php есть функция array_combine(). Вот она делает в точности то что мне нужно. Берет идентификаторы первого массива (id из Таблицы1) и присваивает им значения второго массива (мой массив с кастомными значениями). На yii2 я так понимаю нет возможности воспользоваться этой функцией?
Почему нельзя? Пользуйтесь.

Вот в доке https://demos.krajee.com/widget-details/select2

Select2::widget([
'model' => $model,
'attribute' => 'state_2',
'data' => $data, // data: array the select option data items. The array keys are option values, and the array values are the corresponding option labels.

Сформируйте $data как вам нужно, и все.

По крайней мере я с не сталкивался с проблемой.
Хотя Select2 применяется вовсю.
и какие только списки ему не передаются.
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Ответить