Yii framework. Вывод связных таблиц списком?

Всем здравствуйте. Есть 4 таблицы БД MySql
Users - тб пользователей. Со строками: country_id(страна) region_id(область) city_id (Город). Geo_countries - тб со странами (id, name и т д).
Geo_regions - тб с регионами(id, name и т д).
Geo_city - тб с городами(id, name и т д).

Как в Yii1 задать связь этих таблиц, и вывести в форме регистрации так, что бы выбирая например "Россия" выпадали только российские регионы?

Привожу код который уже написал:
Файл модели Users.php связь с табличкой Geo_countries прописал так:
/**
     * @return array relational rules.
     */
    public function relations()
    {
            return array(
                'geo_countries' => array(
                    self::BELONGS_TO, 'GeoCountries', 'country_id'), );
    }

Вывожу в профиле юзера страну вот так(файл views.php):
<b><?php echo CHtml::encode($data->getAttributeLabel('country_id')); ?>:</b>
<?php echo CHtml::encode($data->geo_countries->name); ?>
<br />

В файле формы редактирования юзера и создания вывожу выпадающий список вот так:
<div class="row">
<?php $models = GeoCountries::model()->findAll(
        array('order' => 'ordering'));
        $list = CHtml::listData($models, 'id', 'name'); ?>    
<?php echo $form->labelEx($model,'id', $data); ?>
<?php echo $form->dropDownList($model,'geo_countries', array('empty'=>'Выбор страны', $list)); ?>
<?php echo $form->error($model,'id'); ?>
</div>

В контроллерах ничего не трогал. Ни в userController ни в geoCountriesController.
Список выводиться но как то странно... после "Выбор страны" какой то 0 (ноль) непонятный вылез.
Вот так примерно выглядит:
>
Выбор страны
0
Страна 1
Страна 2
итд

Вылез какой то непонятно откуда взявшийся ноль, и самое главное что при редактировании или создании юзера, данные о стране не записываются в БД. То биш не сохраняются.
Очень нужна помощь специалистов по yii1. Что не так я сделал? Почему в бд ничего не записывается... и что это за странный ноль в массиве?
  • Вопрос задан
  • 479 просмотров
Пригласить эксперта
Ответы на вопрос 2
Попробуйте так:
<?php echo $form->dropDownList($model, 'country_id', $list, array('empty' => 'Выбор страны')); ?>

Второй аргумент - это поле модели User, по которому идет связь со странами (у вас это country_id).
Третий - список стран.

Связь стран, регионов и городов задаете в Mysql созданием соответственно полей:
country_id в Geo_regions
region_id в Geo_city

Далее прописываете эти связи в моделях стран, регионов и городов в relations().
А про то, как реализовать автоматическую подгрузку значений селектов (взаимосвязанные селекты) много информации в поисковиках.

UPD: ну и обязательно прописать правила для валидации country_id, region_id, city_id в моделях в rules(), чтобы значения сохранялись в БД.
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Мне кажется лучше использовать demos.krajee.com/widget-details/select2
делать ajax запросы и грузить только то что надо. Иначе получатся огромные массивы данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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