Relazioni Tra 3 Tabelle E Vista Corrispondente

Ciao a tutti,

sono nuovo del forum e “di Yii” e mi sto appassionando sempre più a questo framework. Sto avendo un problema con le viste le relazioni (immagino sia l’ennesimo topic sull’argomento) ma non sono riuscito a trovare una soluzione e pertanto confido nella vostra esperienza al riguardo sperando che possa essere utile a qualche altro novellino che si accinge a provare questo fw. :)

Il mio db è costituito da 3 tabelle:

  • Clienti

  • Medici

  • Referti

in particolare:

Medici(1) --> (molti) Clienti (1) —> (molti) Referti

e le chiavi sono

id_medico —> Clienti.id_medico

Clienti.id —> Referti.id_cliente

PS: in allegato un img.

Le relazioni sono create correttamente (credo) sia a livello di db (InnoDB) che a livello logico all’interno del fw. In particolare per la tabella “Clienti” sono definite (nel Model Clienti) come segue:




public function relations()

{

	// NOTE: you may need to adjust the relation name and the related

	// class name for the relations automatically generated below.

	return array(

		'idMedico' => array(self::BELONGS_TO, 'MediciBase', 'id_medico'),

		'refertis' => array(self::HAS_MANY, 'Referti', 'id_cliente'),

	);

	

}



Nella vista admin, ho una CGridView con l’elenco dei clienti, ma vorrei visualizzare anche le informazioni relative al medico associato a ciascun cliente. Per ora ho fatto cosi:




$this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'clienti-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

		'id',

		'nome',


		... 


		'idMedico.cognome::Medico', //Questa è la riga inserita

		

		...

		array(

			'class'=>'CButtonColumn',

		),

	),

)); ?>



La relazione funziona correttamente, ma non so se è il procedimento corretto. Devo modificare in questo modo tutte le viste in cui voglio far comparire campi di un’altra tabella relazionata? E poi, come faccio a fare in modo che il campo “cognome” del Medico sia cliccabile in modo da reindirizzare alla pagina di dettaglio del medico?

Grazie in anticipo per le risposte e scusate la lunghezza del post.