Ayuda con activeDropDownList

Hola foro,

Necesito en la captura de un nuevo registro que el usuario seleccione de un DropDownList la referencia al código al que se liga ese registro:

La tabla WBS tiene el campo id_prime_code que es el ID de la tabla PRIME_CODES, hay una relación entre esas tablas de 1:n; un PRIME_CODE puede tener muchos WBS

En el modelo protected/models/Wbs.php tengo:




	public function activePrimeCodes()

        {       

                $WHERE_PART = 'active=1';

                $data = Yii::app()->db->createCommand()

                        ->select('descr')

                        ->from('prime_codes')

                        ->where($WHERE_PART)

                        ->queryColumn();

                return $data;

        }



En la vista protected/views/_form.php tengo:




	<div class="row">

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

		<?php echo CHtml::activeDropDownList($model, 'id_prime_code', 

					$model->activePrimeCodes(), array('prompt'=>'Select')); ?>

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

	</div>



Si me genera la lista pero a los ‘value’ de cada elemento le pone de forma consecutiva “0”,“1”,“2”… no le pone su correpondiente ID (prime_codes.id).

Cómo lo puedo solucionar o de que otra forma lo puedo hacer, tengo un modelo para prime_codes.

Gracias por su tiempo.

Saludos.

Hola Arturo,

Digamos que hay dos problemas en uno, el problema de que los consecutivos no corresponden al ID de la tabla es porque Yii tiene en cuenta los índices del array para el activeDropDownList (que si no son especificados son numéricamente consecutivos).

Le recomiendo usar mejor una sentencia del siguiente estilo:


echo CHtml::activeDropDownList(

    $model,

    'id_prime_code',

    CHtml::listData(PrimeCodes::model()->findAll(), 'ID', 'descr'),

    array('prompt'=>'Select')

); 

Espero que se de utilidad.

Saludos y éxitos,

Ricardo

Gracias Ricardo por tu respuesta, funciona bien, el punto ahora es que sólo se deben mostrar los prime_codes que estan activos: prime_codes.active = 1

Se podrá de esta manera ?

Muchas gracias por tu tiempo.

Saludos.

Ok, ya lo tengo,

Agregando la condición en findAll():




echo CHtml::activeDropDownList(

	$model,

	'id_prime_code',

	CHtml::listData(PrimeCodes::model()->findAll(array('condition'=>'active=1')), 'id', 'descr'),

	array('prompt'=>'Select')

);



Gracias Ricardo, foro.

Saludos.

Con gusto, para eso estamos todos :)

Saludos.

Muy claro todo , gracias! Esto resume mucho codigo y consultas sql!!

Cada dia quiero mas a Yii! :)