两个相关的下拉列表,其中包含两个不同表中的值

时间:2013-01-18 21:50:39

标签: php yii

我需要在页面中显示两个相关的下拉列表。如果我们从第一个下拉列表中选择一个项目,根据我们选择的项目,它应该过滤第二个下拉列表中的条目,然后我需要使用第二个下拉列表中的值执行搜索。但问题是,从第一个下拉列表中显示的表中的值不是它的活动记录。任何人都可以帮忙吗?

目前我已经有了第二个下拉列表,它可以根据所选值执行搜索。现在我需要做的是在其上方放置一个下拉列表,并根据第一个下拉列表过滤项目。

修改

第一个表 - client_id,client_name - 第一个下拉列表中的项应显示客户端名称

第二个表 - program_id,client_id,program_name -

第3个表 - ad_id,program_id,ad_name - 第二个下拉列表应显示使用client_id过滤的ad_names。

1 个答案:

答案 0 :(得分:0)

最后我做到了,就是这样。

在我的控制器中,

public function actionDynamicDropdownList()
   {
    if($_POST['client_id'] > '0') {
        $result = Yii::app()->db->createCommand()->select('program_id, program_name')->from('program')->where('client_id='.$_POST['client_id'].'')->order('program_name')->queryAll();
        $this->render('admin', array(
            'result' => $result,
        ));
      }
}
public function actionDynamicProgramsList()
{
    if($_POST['program_id'] > '0') {
        $results = Yii::app()->db->createCommand()->select('ad_id, ad_name')->from('ads')->where('program_id='.$_POST['program_id'].'')->order('ad_name')->queryAll();
        $this->render('admin', array(
            'results' => $results,
        ));
    }
}

在我看来,我添加了

<?php
$data = Yii::app()->db->createCommand()->select('client_id, client_name')->from('client')->order('client_name')->queryAll();
echo CHtml::dropDownList('client_id', '',CHtml::listData($data,'client_id','client_name'), array(
'empty'=>'- Select Client Name -',
'ajax'=> array(
'type'=>'POST',
'url'=>Yii::app()->baseUrl.'/index.php?r=page/dynamicDropdownList',
'update'=>'#program_id'))); 

//empty since it will be filled by the above dropdown
echo CHtml::dropDownList('program_id','', CHtml::listData($result,'program_id','program_name'), array(
'empty'=>'- Select Program Name - ',
'onchange'=>'alert(this.value);',
'ajax'=> array(
'type'=>'POST',
'url'=>Yii::app()->baseUrl.'/index.php?r=page/dynamicProgramsList',
'update'=>'#ad_id')));
    //empty since it will be filled by the above dropdown
echo CHtml::dropDownList('ad_id','', CHtml::listData($results,'ad_id','ad_name'), array(
'empty'=>'- Select Ad Name - ',

));
?>