Popolare Dropdownlist Da Piu Tabelle

salve,

Mi trovo nella seguente situazione che non riesco a risolvere

tbl_utente


|id |

|utente |

|cittaId |


tbl_citta


|id |

|citta |

|provinciId |


tbl_provincia


|id |

|provincia |


Nella form di inserimento dell’utente vorrei che la dropDownList cittaId caricasse i dati

nella seguente forma id=tbl_citta.id e value=tbl_citta.Citta+’(’+ tbl_provincia.provincia +’)’

nel model Utente ho creato la relazione con la tbl_citta ma non credo che basti.

grazie mille

Ma il tuo problema qual’è?

Mettere in JOIN le tabelle o solo di visualizzazione della label?

nella form metti un codice di questo tipo:




<?php echo $form->dropDownList($model,'cittaId',CHtml::listData(Citta::model()->findAll(), 'id', 'cittaprovincia')); ?>



e nel model Citta, assicurati di avere la relazione provincia di tipo belongs to su provinciaId




public function relations()

{

   return array(

	'provincia' => array(self::BELONGS_TO, 'Provincia', 'provinciaId'),

   );

}


public function getCittaProvincia() {

   return $this->citta." (".$this->provincia->provincia.")";

}



Ciao st4nny,

la relazione già l’avevo creato.

Quello che non capisco del tuo codice è la funzione getCittaProvincia.

A cosa mi serve e sopratutto da dove la chiamo?

Grazie

la chiami da qui:

<?php echo $form->dropDownList($model,‘cittaId’,CHtml::listData(Citta::model()->findAll(), ‘id’, ‘cittaprovincia’)); ?>

praticamente stai definendo un attributo virtuale al tuo model

commentiamo un pò di codice:

$form->dropDownList($model,‘cittaId’… //dropdown agganciata all’attributo del tuo utente cittaId

CHtml::listData // è un metodo che ti restituisce al volo i dati per popolare la dropdown a partire da un Model (Citta::model()->findAll()) nel formato ‘chiave’=>‘valore’ (‘id’, ‘cittaprovincia’)

il cittaprovincia è il getCittaProvincia che abbiamo definito nel model Citta

Il codice ovviamente funziona benissimo.

Come si costruisce una dropDownList già lo sapevo, ma in questo caso non riesco a capire come faccia afunzionare il metodo getCittaProvincia. La sintassi mi spiazza. Venendo io dalla programmazione procedurale.

Giusto per una mia curiosità vorrei approfondire l’argomento, sai dove posso vedere un po’ di informazioni. Sotto quale voce?

Grazie

te l’ho detto, stai definendo un attributo virtuale al tuo model,

altrimenti avresti fatto:




<?php echo $form->dropDownList($model,'cittaId',CHtml::listData(Citta::model()->findAll(), 'id', 'citta')); ?>



e il listdata ti avrebbe popolato il dropdown con chiave=>valore : id=>citta (veri attributi del tuo model). Questo sarebbe il metodo canonico. Puoi farlo anche con degli attributi virtuali (informazione aggiuntiva :D)

qui un link a supporto:

http://www.yiiframework.com/wiki/167/understanding-virtual-attributes-and-get-set-methods/