保存依赖下拉数据 - Yii

时间:2013-11-28 17:39:13

标签: php mysql ajax yii

我正在实施一个依赖下拉菜单,并希望将他们的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);
    }
}

2 个答案:

答案 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'),