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.