我正在实现一个依赖下拉列表,并希望将他们的 ID 保存在表 CANDIDATE 中。
我有一个名为 CENTER 的表,它有两列 ID,NAME。
我的另一个表是 DISTRICT,它包含三列 ID、NAME 和 CENTER_ID。
通过选择 CENTER ,我填充了 DISTRICT 下拉列表,但 district_id 没有保存在表 CANDIDATE 中。
_form
<div class="row">
<?php echo $form->labelEx($model, 'district_id'); ?>
<?php
$dist = CHtml::listData(Center::model()->findAll(array('order' => 'id')), 'id', 'name');
echo $form->dropDownList($model, 'center_id', $dist, array(
'prompt' => '–select district–',
'ajax' => array('type' => 'POST',
'url' => CController::createUrl('candidate/districts'),
'update' => '#center_id',
)
));
?>
<?php
echo CHtml::dropDownList('center_id','', array());
?>
</div>
候选 Controller
public function actionDistricts() {
$centers = District::model()->findAll('center_id =:id', array(':id' => (int) $_POST['Candidate']['center_id']));
$return = CHtml::listData($centers, 'id', 'name');
foreach ($return as $centerId => $centerName) {
echo CHtml::tag('option', array('value' => $centerId), CHtml::encode($centerName), true);
}
}
最佳答案
1) 似乎您的网址未正确创建:
'url' => CController::createUrl('districts')
尝试:
'url' => CController::createUrl('candidate/districts')
2) 您发布的表单:
$form->dropDownList($model, 'district_id', $dist...
它将 district_id 发布到 CandidateController/actionDistricts(),您可以在其中执行以下操作:
$centers = Center::model()->findAll('id=:id', array(':id' => (int) $_POST['Candidate']['center_id']));
我看不到任何包含 center_id 的输入,此外,如果您按主键 (id) 搜索,触发 Center::model()->findAll('id:id'..) 没有任何意义,做 Center::model()->findByPk($id);
无论如何,回到问题上来,你的 Firebug 日志说明了一切,它无法从 $_POST 变量中读取 center_id,所以要完成它,请尝试重写 actionDistricts()。
我猜不出你的数据库有什么样的关系(一个区,每个 1 个中心?),所以我无法在这里完全解决问题。但是你应该重写
$centers = Center::model()->findAll('id=:id', array(':id' => (int) $_POST['Candidate']['center_id']));
到期望 $_POST['Candidate']['district_id'] 的东西。
关于php - 保存依赖下拉列表的数据 - Yii,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20271996/