У меня есть две таблицы Customer и Location. Местоположение имеет поля id, страну, зону, штат и город. Таблица клиентов имеет внешний ключ location_id.
При создании клиента мне нужно отобразить раскрывающиеся списки для страны, зоны, штата и города в форме создания клиента, а значения в раскрывающемся списке должны быть заполнены из таблицы местоположений. Когда пользователь выбирает эти поля, соответствующий идентификатор местоположения должен быть сохранен в поле location_id таблицы Customer.
При обновлении клиента значения для выпадающих списков стран, зон, штатов и городов должны заполняться в форме на основе внешнего ключа location_id. Любые изменения в значениях этих выпадающих списков должны быть сохранены как внешний ключ location_id.
Любые материалы или ссылки на любые существующие посты / статьи будут очень полезны.
Любые материалы или ссылки на любые существующие посты / статьи будут очень полезны.
Хорошо, некоторые подсказки
значения в раскрывающемся списке должны быть заселены из таблицы местоположений.
Для этого, я думаю, нужно ознакомиться с постом на зависимые выпадающие в YII для заполнения одного раскрывающегося списка при выборе другого.
Когда пользователь выбирает эти поля, соответствующий идентификатор местоположения должен быть сохранен в поле 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()',)),
),
));
Не стесняйтесь спрашивать, нужна ли еще помощь.
Здесь нет ничего особенного. Просто используйте методы, имя которых начинается с 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