Добавление dropDownList на форму

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

Добавление dropDownList на форму

Сообщение dymsonn » 2018.06.13, 16:06

Здравствуйте. Я только начал изучать Yii2. Не могу понять, как добавить dropDownList в файл представления _form. Пытаюсь Объекту добавить адрес. В базе есть таблицы Object , есть Address и Fo, Region(область,край и т.д.). Смысл их думаю понятен. Уточнение, таблица Address является связующей для Объекта и Фед. округа и Региона и содержит в себе id этих таблиц. А таблица Объекта содержит в себе id таблицы Аddress. Автогенерацией созданы модели, контроллеры и представления для всех таблиц, кроме Address. Теперь не понимаю, как мне добавить dropDownList в представление которое отображает создание нового объекта с адресом. Точнее, я добавил его:

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

<?= $form->field($model, id_address)-> dropDownList(ArrayHelper::map(Fo::find()->all(), 'id_region','name'))?>
Но при нажатии кнопки Создать, пишет , что Getting unknown property: app\models\Object::id_fo.
Не могу понять, как добавить поле таблицы, если оно не связано напрямую через модель? Или это возможно только при прописывании связи hasMany в модели?

dymsonn
Сообщения: 29
Зарегистрирован: 2018.06.13, 15:37

Re: Добавление dropDownList на форму

Сообщение dymsonn » 2018.06.13, 17:17

Выяснил, что ошибка была из за привил валидации. Убал оттуда id_fo и код заработал. Только как правильно тогда добавить правило проверки для поля Федеральный округ? Я дописывал в rules()[ id_fo => null]. Но id_fo в представлении это имя Федерального округа.Просто не знаю как правильно, описать имя,если во всех таблицах это name. Поэтому оставил id_fo как сгенерировал Gii, только вывожу имя.

andku83
Сообщения: 667
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Добавление dropDownList на форму

Сообщение andku83 » 2018.06.13, 17:24

структуру таблиц покажите

dymsonn
Сообщения: 29
Зарегистрирован: 2018.06.13, 15:37

Re: Добавление dropDownList на форму

Сообщение dymsonn » 2018.06.13, 17:36

(object)
id_obj
name
id_address
(address)
id_address
id_fo
id_region
name
(fo)
id_fo
name

Извиняюсь что в таком виде. просто с другого компьютера пишу.

andku83
Сообщения: 667
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Добавление dropDownList на форму

Сообщение andku83 » 2018.06.13, 17:50

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

ArrayHelper::map(Address::find()->all(), 'id_address','name')
// или
Address::find()->select(['name','id_address'])->indexBy('id_address')->column()
Либо у вас что-то неверно спроектировано.

Если у адреса hasOne(Fo), то возможно вы хотите получить вариант с адресом в комплекте с фо:

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

Address::find()->select(['name' => new \yii\db\Expression('CONCAT(address.name, " ", fo.name)'),'id_address'])
->joinWith('fo fo')->indexBy('id_address')->column()

dymsonn
Сообщения: 29
Зарегистрирован: 2018.06.13, 15:37

Re: Добавление dropDownList на форму

Сообщение dymsonn » 2018.06.13, 17:59

Это я вывожу name из Address. а как вывести name из Fo, при условии, что связь getFo не прописана?

andku83
Сообщения: 667
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Добавление dropDownList на форму

Сообщение andku83 » 2018.06.13, 18:01

прописать вроде не проблема, но если хочется поразбираться https://www.yiiframework.com/doc/api/2. ... n()-detail

dymsonn
Сообщения: 29
Зарегистрирован: 2018.06.13, 15:37

Re: Добавление dropDownList на форму

Сообщение dymsonn » 2018.06.13, 18:02

Если у адреса hasOne(Fo), то возможно вы хотите получить вариант с адресом в комплекте с фо:

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

Address::find()->select(['name' => new \yii\db\Expression('CONCAT(address.name, " ", fo.name)'),'id_address'])
->joinWith('fo fo')->indexBy('id_address')->column()
[/quote]
Вечером буду пробовать,отпишусь что получилось.

dymsonn
Сообщения: 29
Зарегистрирован: 2018.06.13, 15:37

Re: Добавление dropDownList на форму

Сообщение dymsonn » 2018.06.18, 11:00

спасибо это помогло

Ответить