Yii 框架:从相关表中填充数据


Yii framework: populate data from related table

我有两个表客户和位置。位置包含字段 ID、国家/地区、区域、州和城市。客户表具有外键location_id。

创建客户时,我需要在创建客户窗体上显示国家/地区、区域、州和城市的下拉列表,下拉列表中的值应从位置表中填充。当用户选择这些字段时,相应的位置 ID 应保存在 客户 表的location_id字段中。

更新客户时,应根据location_id外键在表单中填充国家/地区、区域、州和城市下拉列表的值。这些下拉列表值的任何更改都应另存为外键location_id。

任何对任何现有帖子/文章的输入或指针都将有很大帮助。

任何对任何现有帖子/文章的输入或指针都将有很大帮助。

好的,一些提示

1.

下拉列表中的值应从位置表中填充。

为此,我认为,您需要熟悉 yii 中有关依赖下拉列表的帖子,以便在从另一个下拉列表中选择时填充一个下拉列表。

阿拉伯数字。

当用户选择这些字段时,相应的位置 ID 应保存在 客户 表的location_id字段中。

为此,您可能需要在下拉/文本字段选择/更改时执行一些 ajax 调用。你可以通过外部js函数来做到这一点,但我推荐使用带有Yii的Select2。例如,在 Select2 中的项目更改中,对控制器eventsPerformance执行 ajax 调用,并将数据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 操作。因此,您只需要在用户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表中,一个 ID 标识了国家/地区-州-城市的整个组合,即:

1 | USA | NULL | Arizona | Phoenix
2 | ... | ...
如果需要每个数据库的

下拉列表,则需要创建单独的数据库表。

// countries
id | title
// cities
id | country_id | title