Bono, eu fiz algo parecido só q um pouco diferente. Eu fiz tudo pelo Model e as chamadas fiz pelo Controller e suas respectivas Views.
Meu cenário era identificar a pessoa que postou a notícia.
Autor::model()
public function getListAutor()
{
$criteria = new CDbCriteria();
$criteria->select = 'id, nome';
$criteria->condition = "status = :status";
$criteria->params = array(":status" => 'A');
$criteria->order = "name ASC";
return Autor::model()->findAll($criteria);
}
Aqui fiz a consulta que vai listar todos os ids e nome dos autores cujo o status seja igual a A (Ativo) na ordem Crescente.
NoticiasController
Nos métodos actionCreate() e actionUpdate() onde faz respectivamente o INSERT e UPDATE está assim:
public function actionCreate()
{
$model=new Noticias;
if(isset($_POST['Noticias']))
{
$model->attributes=$_POST['Noticias'];
if($model->save())
$this->redirect(array('view','id'=>$model->idNoticia));
}
$this->render('create',array(
'model'=>$model,
'autor' => Autor::model()->getListAutor(),
));
}
public function actionUpdate($id)
{
$model=$this->loadModel($id);
if(isset($_POST['Noticias']))
{
$model->attributes=$_POST['Noticias'];
if($model->save())
$this->redirect(array('view','id'=>$model->idNoticia));
}
$this->render('update',array(
'model'=>$model,
'autor' => Autor::model()->getListAutor(),
));
}
Repare que no render de actionCreate() e actionUpdate() eu passei o parâmetro autor contendo o método getListAutor() do Autor::model().
Seguindo para a view.
Nas views create.php e update.php acrescentar na linha do renderPartial o model autor.
<?php echo $this->renderPartial('_form', array('model'=>$model, 'autor' => $autor)); ?>
E na view _form.php para adicionar o dropDownList:
<?php echo $form->dropDownList($model, 'idAutor', CHtml::listData($autor, 'id', 'nome')); ?>
Aqui, na hora do update ele retorna na dropDownList o autor que foi selecionado no INSERT.