Atualizar os dados depois de criado DropdownList Dependente

Boa tarde! Precisava de ajuda no seguinte:

Criei um form com duas DropdownList. Em função do que escolher na primeira dropdown que é referente aos Serviços são listados os materiais associados a esse serviço que previamente defini na base de dados.

Até aqui tudo bem, está tudo a funcionar direito. O problema é quando quero atualizar esses mesmos dados que inseri. Não consigo que os dados sejam mostrados nas duas Dropdownlists conforme o que foi inserido. Aparecem os valores por defeito, ou seja, na primeira Dropdownlist "Escolha Servico" e na segunda Dropdownlist aparece em branco, porque neste caso só depois de escolher a primeira é que atualiza a segunda. Mas como estou a atualizar tem que aparecer automaticamente selecionados as dropdownlist e nao estou a conseguir.

A minha view (form create):




	<div class="row">

		<?php echo $form->labelEx($model,'ServicoId'); ?>

		<?php 

			echo CHtml::dropDownList('ServicoId','', CHtml::listData(Servicos::model()->findAll(),'Id','Nome'),

				array(

					'empty'=>'Escolha Servico',

					'ajax' => array(

					'type'=>'POST', //request type

					'url'=>CController::createUrl('requisicoesBlocos/SendMaterialId'), 

					'update'=>'#MaterialId', //selector to update

					)

				)

			); 

		?>

		<?php echo $form->error($model,'ServicoId'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($model,'MaterialId'); ?>

		<?php echo CHtml::dropDownList('MaterialId','', array()); ?>

		<?php echo $form->error($model,'MaterialId'); ?>

	</div>



O meu controller:




public function actionSendMaterialId()

	{

		// Zec / Devolve material fico depois de escolher o servico e o Material

		$qry = 'SELECT * from materiais

				inner join materiais_servicos on

				materiais_servicos.ServicoId = '.'"'.$_POST['ServicoId'].'"

				and materiais_servicos.MaterialId = materiais.Id

				group by Nome;';

			   

		$result = Yii::app()->db->createCommand($qry)->queryAll();


		$data=CHtml::listData($result,'MaterialId', 'Nome');

		 foreach($data as $id => $value)

            {

                echo CHtml::tag('option',array('value' => $id),CHtml::encode($value),true);

            }

	}






	public function actionCreate()

	{

		$model=new RequisicoesBlocos;

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);

		if(isset($_POST['RequisicoesBlocos']))

		{

			$model->attributes=$_POST['RequisicoesBlocos'];


			$model->Data = date("Y-m-d H:i:s");

			$model->MaterialId = $_POST['MaterialId'];

			$model->ServicoId = $_POST['ServicoId'];

			

			if($model->save())

				$this->redirect(array('index'));

		}

		$this->render('create',array(

			'model'=>$model,

		));

	}


	/**

	 * Updates a particular model.

	 * If update is successful, the browser will be redirected to the 'view' page.

	 * @param integer $id the ID of the model to be updated

	 */

	public function actionUpdate($id)

	{

		$model=$this->loadModel($id);


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['RequisicoesBlocos']))

		{

			$model->attributes=$_POST['RequisicoesBlocos'];

			if($model->save())

				$this->redirect(array('view','id'=>$model->Id));

		}


		$this->render('update',array(

			'model'=>$model,

		));

	}



Como é que faço isso?

Abraço!

Vilas,

Vou colocar um modelo de como racionamente você pode fazer para suprir suas nescessidades:




<div class="row">

	<?php echo $form->labelEx($model,'ServicoId'); ?>

	<?php 

	echo CHtml::dropDownList('ServicoId','', CHtml::listData(Servicos::model()->findAll(),'Id','Nome'),

		array(

			'empty'=>'Escolha Servico',

			'ajax' => array(

			'type'=>'POST', //request type

			'url'=>CController::createUrl('requisicoesBlocos/SendMaterialId'), 

			'update'=>'#MaterialId', //selector to update

			)

		)

	); 

	?>

	<?php echo $form->error($model,'ServicoId'); ?>

</div>

<?php

$data = array();

if(!$model->isNewRecord){

$qry = "SELECT * from materiais

		inner join materiais_servicos on

		materiais_servicos.ServicoId = '{$model->ServicoId}'

		and materiais_servicos.MaterialId = materiais.Id

		group by Nome;";

                           

	$result = Yii::app()->db->createCommand($qry)->queryAll();

	$data=CHtml::listData($result,'MaterialId', 'Nome');

}

?>

<div class="row">

		<?php echo $form->labelEx($model,'MaterialId'); ?>

		<?php echo CHtml::dropDownList('MaterialId','', $data); ?>

		<?php echo $form->error($model,'MaterialId'); ?>

</div>



Como pode observar, você faz usa a consulta do ‘requisicoesBlocos/SendMaterialId’ para mostrar o resultado do MaterialId.

Como estou observando que você e novo em Yii, tem uns tópicos no fórum que vai ajudar a você fazer os relacionamento das tabelas diretamente no model, ai sua consulta nos Controller e View fica mais limpa.

Entao Newerton! Tenho mesmo que dar uma vista de olhos nos relacionamentos. Resolveste o meu problema, só fiz uma unica alteração que foi acrescentar $model->ServicoId.


echo CHtml::dropDownList('ServicoId',$model->ServicoId, CHtml::listData(Servicos::model()->findAll(),'Id','Nome'),



, de resto ta cinco estrelas.

Abraço!