Yii Framework Forum

Combo de una base de datos con fk


(My_Myks) #1

buen dia como puedo hacer un combo con dropDownlist en una tabla con una base de datos que esta de esta forma
combo
quiero que se muestren el nombre de la persona con ese id que esta subrayado de color amarillo.
En la tabla el registro de persona esta definida como llave FK.

Gracias espero me puedan ayudar


(Eloy Gonzalez) #2

Hola @My_Myks;

Puedes usar directamente el modelo user generado al instalar Yii y hacer la primera migración

<?php $users = yii\helpers\ArrayHelper\ArrayHelper::map(\app\models\User::find()->orderBy('id')->all(), 'id', 'username') ?> <?= $form->field($model, 'users')->dropDownList($users, ['prompt' => '---- Seleccione ----']) ?>

(My_Myks) #3

Gracias por responder @Eloy-Gonzalez
pero yo estoy utilizando la versión 1.1


(Eloy Gonzalez) #4

@My_Myks

Intenta con este código.

<?php echo CHtml::dropDownList('users', 'id', CHtml::listData(Users::model()->findAll(),'id', 'username',) ); ?>

(My_Myks) #5

@Eloy-Gonzalez
Al parecer se muestran todos los nombres que hay en la tabla “personas”, y solo quiero que se muestren los nombres de los ‘n’ registros que están en la tabla asesor

el codigo que me mostraste lo escribi de la siguiente manera

<?php echo CHtml::dropDownList('persona', 'id_asesor', CHtml::listData(Persona::model()->findAll(),'id_persona','nombre') ); ?>

si cambio el modelo por Asesor solo se muestran los id (5,21,46,51,52)


(Rafael Rosales) #6

Hola, al parecer tienes n registros en la tabla personas, pero solo quieres que se muestre en tu dropDownList, los que están en una relación con la tabla asesor, donde me imagino que la tabla asesor esta relacionada con la tabla persona por el campo persona de la tabla persona y la llave principal de la tabla asesor, si es asi entonces tienes que filtrar el combo para esa relación.
Algo así:

&lt;?php echo CHtml::dropDownList('persona', 'id_asesor', CHtml::listData(Persona::model()-&gt;findAll(array('order' => 'campo ASC', 'condition' => 'persona.persona = asesor.Id_asesor',
                ))),'id_persona','nombre') ); ?&gt;

pensando que el campo llave de la tabla asesor es id_asesor y esta relacionada con la tabla persona con el campo presona, también puedes filtrar con where, pero siempre con los campos relacionados de ambas tablas.
Si tuviera algún error, entonces muéstrame tu dos tablas con sus relaciones


(My_Myks) #7

Gracias @Rafael_Rosales
me sirvio