dropDownList scambio id descrizione

Ciao a tutti

la domanda sarà sicuramente stupidina

ma ho il form creato da gii

sono riuscito a modificarlo mettendoci

uan dropDownList con id e descrizione

ora il mio problema è salvare l’ id.

Come e dove lo reperisco?

mi spiego meglio ho una tabella utenti e tipoUtenti

con relativi model e quant altro

sul form crea utenti

ho messo la dropDownList con la desc4rizione del tipo utente(sull’ altra tabella ovviamente)

ora però mi serve di salvare l’ id su utenti. Le due tabelle sono relazionate.

questa è la mia action




public function actionCrea()

	{

		$model=new Utenti;


		// Uncomment the following line if AJAX validation is needed

		 //$this->performAjaxValidation($model);


		if(isset($_POST['Utenti']))

		{

			$model->attributes=$_POST['Utenti'];

			if($model->save())

				$this->redirect(array('view','id'=>$model->idUtentiPK));

		}


		$this->render('create',array('model'=>$model,));

	}




e questo il from di utenti




<div class="row">

		<?php echo $form->labelEx($model,'tipoUtente.descrizioneTipoUtente'); ?>

		<?php $models = TipoUtente::model();  

    

 		// format models resulting using listData     

     		$list = CHtml::listData($models->findAll(), 'idTipoUtente', 'descrizioneTipoUtente');


		echo CHtml::dropDownList('TipoUtente', $TipoUtente, $list, array('empty' => '(Seleziona'));  ?>

		<?php echo $form->textField($model,'idTipoUtenteFK'); ?>

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

	</div>




nel quale per altro ho inserito il caricamento dell’ altra tabella per fare la dropDownList non so se sia corretto.

Grazie

Credo che tu debba studiarti le roles e modificarle nel model.

Ti mostro che cosa ho fatto io per risolvere un problema molto simile al tuo:




    <tr>

      <td width="50%" align="right"><?php echo $form->labelEx($model,'stato'); ?></td>

      <td width="50%" align="left"><?php echo $form->dropDownList($model,'stato',array(

        'nuovo'=>'nuovo',

        'usato'=>'usato',

        )); ?></td>

    </tr>



In pratica, seguendo le regole di Yii dovrai scrivere qualche cosa tipo




$form->dropDownList($model,'idTipoUtente',tipoUtente::model()->findAll());



Sono andato a sentimento. Questi per farti capire che devi usare "$form->".

sìììì

ce l’ ho fatta grande senso

Io ho fatto così:




  <?php

    /* Definizione dell'array dei commerciali */

    $commerciali = Commerciali::model()->findAll(array('order' => 'cognome,nome',));

    $commerciale = array();

    foreach ($commerciali as $comm) $commerciale[$comm->id] = $comm->cognome ." ". $comm->nome;

  ?>


	<div class="row">

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

		<?php echo $form->dropdownList($model,'id_commerciale',$commerciale); ?>

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

	</div>



Come vedi carico tutti i commerciali e poi li metto nella dropdownList. Però non mi è chiaro come mai non mi ha preso direttamente


Commerciali::model()->findAll(array('order' => 'cognome,nome',))

prova ad aggiungere :


$commerciali = Commerciali::model()->findAll(array('select'=>'id,nome,cognome', 'order' => 'cognome,nome'));

consigliato anche per questioni di performance (evitare sempre di eseguire query con select *)

inoltre ti consiglio di creare una funzione nel model tipo getCommercialiNomeCognome e richiamarla dal controller per mantenere la struttura MVC

Devi usare CHtml::ActiveDropDownList, non CHtml::dropdownlist:




 echo CHtml::activedropDownList($model, 'TipoUtente', $list, array('empty' => '(Seleziona'));  ?>



Il fatto e’ che CActiveForm (il nostro $form) ha dei metodi che si chiamano dropdownlist, textfied ma sono solo dei wrapper per CHtml::ACTIVEdropdownlist, CHtml::ACTIVEtextfied.

Questa scelta un po’ infelice porta a molte incomprensioni, comunque se lavori con dei model devi usare CHtml::activeQualcosa, che si traduce $form->qualcosa.