¿Cómo hacer que YII genere una lista desplegable de usuarios conocidos?
-
26-10-2019 - |
Pregunta
Estoy empezando a aprender a usar yii, y ya logró hacer algunas cosas básicas.
Digamos que tengo dos tablas simples: "usuarios" y "proyectos" donde la relación es de 1 a muchos (un usuario puede tener muchos proyectos)
He generado CRUD usando GII, pero en la página "Crear/editar usuario" esto no proporciona el menú desplegable sino solo un campo de texto donde necesito ingresar la ID de usuario.
Al editar un proyecto, me gustaría tener una lista desplegable donde pueda seleccionar un usuario (por lo que el elemento debe mostrar una lista de nombres de usuario).
Supongo que GII no puede generar el controlador y ver código para esto
¿Cuál sería la mejor práctica para hacer esto?
Ya he declarado las relaciones como se indica en http://www.yiiframework.com/doc/guide/1.1/en/database.arr
public function relations()
{
return array(
'projects_rel'=>array(self::BELONGS_TO, 'Users', 'user_id'),
);
}
y
public function relations()
{
return array(
'users_rel'=>array(self::HAS_MANY, 'Projects', 'project_id'),
);
}
Solución
Encuentre el código de muestra para generar la lista de usuarios
<?php
$form = $this->beginWidget('CActiveForm', array(
'id' => 'project-form',
'enableAjaxValidation' => true,
));
?>
<?php echo $form->dropDownList($model, 'user_id',
CHtml::listData(Projects::model()->with('projects_rel')->findAll(), 'id', 'username'),
array('style'=>'width:150px;')
); ?>
Otros consejos
Consulte esta extensión GII para generar cruds extendidos:
- Colección de plantillas GII (Fullmodel, Fullcrud)
- último desarrollo en github
- Giix
Ambos pueden representar formas con entradas de relación. GTC utiliza un widget de relación para estas entradas que se pueden personalizar.
No te olvides de desenchufar
$ this-> performeajaxvalidation (modelo $)
¡En el controlador o tendrás que artículos creados en lugar de uno!