我正在实施一个依赖下拉菜单,并希望将他们的ID保存在表CANDIDATE中
我有一个名为CENTER的表,它有两列ID,NAME
我的另一个表是DISTRICT,它有三列ID,NAME和CENTER_ID
通过选择CENTER,我填充了DISTRICT下拉菜单,但是area_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>
CandidateController
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);
}
}
答案 0 :(得分:1)
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() - &gt; findAll('id:id'..)没有意义,做中心:: model() - &gt; findByPk($ id);
无论如何,回到问题,你的firebug日志就是这样,它无法读取center_id形式的$ _POST变量,所以要完成它,尝试重写actionDistricts()。
我猜不出你的数据库有什么样的关系(一个区,每1个中心?),所以我不能完全解决这个问题。但你应该重写
$ centers = Center :: model() - &gt; findAll('id =:id',array(':id'=&gt;(int)$ _POST ['Candidate'] ['center_id'])) ;
预期$ _POST ['Candidate'] ['district_id']。
答案 1 :(得分:0)
替换
'url' => CController::createUrl('districts'),
通过
'url' => $this::createUrl('candidate/districts'),