Страница 1 из 1

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

Добавлено: 2018.06.13, 16:06
dymsonn
Здравствуйте. Я только начал изучать 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 в модели?

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

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

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

Добавлено: 2018.06.13, 17:24
andku83
структуру таблиц покажите

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

Добавлено: 2018.06.13, 17:36
dymsonn
(object)
id_obj
name
id_address
(address)
id_address
id_fo
id_region
name
(fo)
id_fo
name

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

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

Добавлено: 2018.06.13, 17:50
andku83

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

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()

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

Добавлено: 2018.06.13, 17:59
dymsonn
Это я вывожу name из Address. а как вывести name из Fo, при условии, что связь getFo не прописана?

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

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

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

Добавлено: 2018.06.13, 18:02
dymsonn
Если у адреса 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]
Вечером буду пробовать,отпишусь что получилось.

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

Добавлено: 2018.06.18, 11:00
dymsonn
спасибо это помогло