Ciao a tutti mi serve urgentemente una mano
per riuscire a displaiare
con CListView, come nella app di default
una tabella referenziata,
ho seguito il tutorial http://www.yiiframew...ng-relationship
ma non ci riesco
la relazione penso di averla dichiarata bene
ho lke tabelle Utenti E tipoUtente
idTipoUtenteFK è dentro utenti
ho fatto
dentro TipoUtente model
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( 'tipoUtente'=>array(self::HAS_MANY, 'TipoUtente', 'idTipoUtenteFK'),);
}
e dentro Utenti model
'utente' => array(self::BELONGS_TO, 'Tipoutente', 'idTipoUtenteFK'),
ma poi come displaio la proprietà
quì dentro _view <b><?php echo CHtml::encode($data->getAttributeLabel('idTipoUtenteFK')); ?>:</b>
<?php echo CHtml::encode($data->idTipoUtenteFK); ?>
<br />
?
Page 1 of 1
Declaring Relationship
#2
Posted 20 January 2011 - 06:35 PM
Devi fare in questo modo:
$data->tipoUtente->NOME_DEL_CAMPO_NON_CHIAVE_DELLA_TABELLA_ESTERNA
Ti porto l'esempio di un lavoro che sto facendo in questo momento: ho un sito con diversi eventi e ad ogni evento ci si può iscrivere. Quindi avremo la tabella eventi e la tabella iscrizioni. La tabella iscrizioni con una chiave esterna. Per completezza:
PS. Non metto mai la chiave esterna in MySQL, ma questo è un problema di "stile".
Tornando a Yii ... ho creato i rispettivi model ed i rispettivi crud con gii ed aggiunto la relazione al model delle iscrizioni:
Data un'iscrizione, per mostrare il nome dell'evento devo richiamare $model->nome_evento->titolo;
Spero di esserti stato utile.
$data->tipoUtente->NOME_DEL_CAMPO_NON_CHIAVE_DELLA_TABELLA_ESTERNA
Ti porto l'esempio di un lavoro che sto facendo in questo momento: ho un sito con diversi eventi e ad ogni evento ci si può iscrivere. Quindi avremo la tabella eventi e la tabella iscrizioni. La tabella iscrizioni con una chiave esterna. Per completezza:
CREATE TABLE IF NOT EXISTS `eventi` ( `id` int(11) NOT NULL AUTO_INCREMENT, `data` varchar(10) NOT NULL, `titolo` varchar(250) NOT NULL, `descrizione` text NOT NULL, PRIMARY KEY (`id`) ); CREATE TABLE IF NOT EXISTS `iscrizioni` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_evento` int(11) NOT NULL, `ragionesociale` varchar(250) NOT NULL, `provincia` varchar(250) NOT NULL, `riferimento` varchar(250) NOT NULL, `telefono` varchar(250) NOT NULL, `fax` varchar(250) NOT NULL, `email` varchar(250) NOT NULL, PRIMARY KEY (`id`) );
PS. Non metto mai la chiave esterna in MySQL, ma questo è un problema di "stile".
Tornando a Yii ... ho creato i rispettivi model ed i rispettivi crud con gii ed aggiunto la relazione al model delle iscrizioni:
public function relations () {
return array(
'nome_evento'=>array(self::BELONGS_TO, 'Eventi', 'id_evento'),
);
}
Data un'iscrizione, per mostrare il nome dell'evento devo richiamare $model->nome_evento->titolo;
Spero di esserti stato utile.
#3
Posted 21 January 2011 - 02:00 AM
Per fare le cose facili, usa innoDB come motore do memorizzazione in sql ed imposta le chiavi esterne.
Cosi' facendo Gii ti genera i modelli con tutte le relation impostate, e non hai dubbi se le hai scritte correttamente.
Per il resto segui i consigli di sensorario
Cosi' facendo Gii ti genera i modelli con tutte le relation impostate, e non hai dubbi se le hai scritte correttamente.
Per il resto segui i consigli di sensorario
#4
Posted 21 January 2011 - 08:48 AM
Questo non lo sapevo zaccaria. Magia! Yii mi stupisce ogni giorno di più. Ed io ti ringrazio ogni giorno di più =). Dato che ci sono... aggiungo anche il codice che ho sostituito nella pagina admin.php della view di iscrizioni del mio stesso esempio:
Come noti, la colonna 'nome_evento.description' è ovviamente il campo description della tabella esterna cui fa riferimento la relazione nome_evento di questo model. Questo codice mi sembrava così logico che ho provato prima ancora di leggerlo in un manuale. Non solo. Sempre nel model ho fatto un altro tentativo:
In pratica, quando nella CGridView chiamo questo model, definisco la label del campo esterno. Io mi sono innamorato =).
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id' => 'iscrizioni-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'nome_evento.description',
'ragionesociale',
'provincia',
'riferimento',
'telefono',
array(
'class'=>'CButtonColumn',
),
),
)); ?>
Come noti, la colonna 'nome_evento.description' è ovviamente il campo description della tabella esterna cui fa riferimento la relazione nome_evento di questo model. Questo codice mi sembrava così logico che ho provato prima ancora di leggerlo in un manuale. Non solo. Sempre nel model ho fatto un altro tentativo:
public function attributeLabels() {
return array(
'id' => 'ID',
'id_evento' => 'Id Evento',
'ragionesociale' => 'Ragione Sociale',
'provincia' => 'Provincia',
'riferimento' => 'Riferimento (Sig. Sig.ra)',
'telefono' => 'Recapito telefonico',
'fax' => 'Fax',
'email' => 'Email',
'nome_evento.description' => 'Titolo dell\'evento',
);
}
In pratica, quando nella CGridView chiamo questo model, definisco la label del campo esterno. Io mi sono innamorato =).
#5
Posted 21 January 2011 - 03:24 PM
grazie a entrambe la label mi funziona ma il dato ancora non mi arriva.
nel model
'tipoUtente' => array(self::BELONGS_TO, 'TipoUtente', 'idTipoUtenteFK'),
view
<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'idUtentiPK',
'nome',
'cognome',
'email',
'userName',
'password',
'idTipoUtenteFK',
'dataAggiornamento',
'tipoUtente.descrizioneTipoUtente',
),
)); ?>
_view
<b><?php echo CHtml::encode($data->getAttributeLabel('tipoUtente.descrizioneTipoUtente')); ?>:</b>
<?php echo CHtml::encode($data->tipoUtente.descrizioneTipoUtente); ?>
<br />
#6
Posted 21 January 2011 - 04:41 PM
ce l' ho fatta!!!!!!!!
ma la relazione va messa da entrambe le parti
ma la relazione va messa da entrambe le parti
#7
Posted 22 January 2011 - 01:14 PM
Serve solo una relazione per quello che fai tu, ma comunque è meglio metterle tutte.
Se da una parte hai una BELONGS_TO dall'altra avrai una HAS_MANY.
Per esempio se hai studente BELONGS_TO classe, per ottenere la classe dello studente ti serve che in studente sia definita la belongs to per fare $studente->classe0
Se invece ti servono gli studenti di una classe serve che sia definita la has many in classe, per chiamare $classe->studentes (che restitusce un array)
Ovviamente, dato che le relations non costano niente, conviene dichiararle tutte e poi usi solo quelle che ti servono.
Usa INNO_DB con le foreign key come database, Yii genera tutte le relazioni da solo e non ci pensi più.
Se da una parte hai una BELONGS_TO dall'altra avrai una HAS_MANY.
Per esempio se hai studente BELONGS_TO classe, per ottenere la classe dello studente ti serve che in studente sia definita la belongs to per fare $studente->classe0
Se invece ti servono gli studenti di una classe serve che sia definita la has many in classe, per chiamare $classe->studentes (che restitusce un array)
Ovviamente, dato che le relations non costano niente, conviene dichiararle tutte e poi usi solo quelle che ti servono.
Usa INNO_DB con le foreign key come database, Yii genera tutte le relazioni da solo e non ci pensi più.
#8
Posted 22 January 2011 - 01:58 PM
sì è quello che ho fatto fin dall' inizio innodb con relazioni che si sono generate con gii
grazie
ora ho dei problemi coi form
ma faccio un altro post magari
grazie
ora ho dei problemi coi form
ma faccio un altro post magari
#9
Posted 24 January 2011 - 02:14 AM
Per le form dai un'occhiata a questa parte della guida.
Se hai altri dubbi apri un'altro thread, ti rispondiamo.
Se hai altri dubbi apri un'altro thread, ti rispondiamo.
Share this topic:
Page 1 of 1

Help















