Yii Framework: заполнить данные из связанной таблицы

У меня есть две таблицы Customer и Location. Местоположение имеет поля id, страну, зону, штат и город. Таблица клиентов имеет внешний ключ location_id.

При создании клиента мне нужно отобразить раскрывающиеся списки для страны, зоны, штата и города в форме создания клиента, а значения в раскрывающемся списке должны быть заполнены из таблицы местоположений. Когда пользователь выбирает эти поля, соответствующий идентификатор местоположения должен быть сохранен в поле location_id таблицы Customer.

При обновлении клиента значения для выпадающих списков стран, зон, штатов и городов должны заполняться в форме на основе внешнего ключа location_id. Любые изменения в значениях этих выпадающих списков должны быть сохранены как внешний ключ location_id.

Любые материалы или ссылки на любые существующие посты / статьи будут очень полезны.

-1

Решение

Любые материалы или ссылки на любые существующие посты / статьи будут очень полезны.

Хорошо, некоторые подсказки

1.

значения в раскрывающемся списке должны быть заселены из таблицы местоположений.

Для этого, я думаю, нужно ознакомиться с постом на зависимые выпадающие в YII для заполнения одного раскрывающегося списка при выборе другого.

2.

Когда пользователь выбирает эти поля, соответствующий идентификатор местоположения должен быть сохранен в поле location_id таблицы Customer.

Для этого вам может потребоваться выполнить ajax-вызов после выпадающего / выбор / изменение textField. Вы можете сделать это с помощью внешней функции JS, но я рекомендую Выберите 2 с Yii.
Например, здесь, при изменении элемента в Select2, ajax-вызов выполняется для контроллера. eventsPerformance и действие save с данными в качестве сериализации всей формы js:$("#performance-form").serialize():

 $this->widget('ext.select2.ESelect2',array(
'attribute' => 'subStatus',
'model'=>$performance,
'data'=>$subStatusArray,
'htmlOptions'=>array(
'onChange'=>CHtml::ajax(array('type'=>'POST',
'url'=>'eventsPerformance/save',
'data'=>'js:$("#performance-form").serialize()',)),
),
));

Не стесняйтесь спрашивать, нужна ли еще помощь.

0

Другие решения

Здесь нет ничего особенного. Просто используйте методы, имя которых начинается с active и ваши выпадающие будут предварительно выбрать правильный вариант. Я полагаю, что вы используете Gii создать свой Операции CRUD. Так что вам нужно только добавить DropDows Location в пользователях update / create Посмотреть. Например.

$user = User::model()->findByPk(99);
$locations = Location::model()->findAll();
$locationList = CHtml::listData($locations, 'id', 'country');

echo CHtml::activeDropDownList($user, 'location_id', $locationList);

Но я думаю, что ваше описание не правильно, потому что в вашем Location В таблице один идентификатор идентифицирует всю комбинацию страна-зона-штат-город, т.е.

1 | USA | NULL | Arizona | Phoenix
2 | ... | ...

Если вам нужны раскрывающиеся списки для каждого из них, вам нужно создать отдельные таблицы БД.

// countries
id | title

// cities
id | country_id | title
0

По вопросам рекламы [email protected]