mi torna un oggetto del model (User in questo caso), ho notato che da questo oggetto posso direttamente "prendere" i valori degli attributi diretti, per esempio "username", "email" etc etc…
$row->password
==>ma se volessi prendere nello stesso modo i dati che sono indirettamente legati tramite le "relations" ?
questo model ha delle relations con altri model, (ad esempio Posts model)
chiamando findByPk mi torna l’oggetto User trovato dal DB
e fin qui ok.
problem: avendo le relations con il model dei Posts, come è possibile prendere le informazioni dei posts direttamente dall’oggetto User?
$row = Utenti::model()->findByAttributes( array('desc_nome_utente'=>$this->username) );
$row->password // i've got a password data, ok.
$row->posts // how can i directly retrieve some information about the posts model that is related with the user model?
alla fine per ottenere i dati relazionati desiderati ho dovuto usare il seguente modo, che capisco bene non essere proprio nei canoni, ma è stato l’unico modo, poi visti i tempi stretti ho dovuto adottare una soluzione di “basso livello” andando a toccare direttamente la classe “CDbCommand” :
Supponiamo di avere un campo regione_id nella tabella utente. E supponiamo di avere una relazione regione che lega la tabella utente alla tabella regione:
echo $utente->regione->nome;
Vuoi accedere ad una chiave esterna anche di regione? Supponiamo che la chiave sia qualcosa_id. E che esita quindi una tabella qualcosa, e che il model regione abbia una relazione ‘qualcosa’
è possibile mettere in relazione 2 tabelle che in comune non hanno ForeignKeys, ma solo applicativamente?..oppure le ralations hanno bisogno NECESSARIAMENTE di una relazione a livello di DB sotto?
mi spiego: tra 2o3 tabelle che hanno una relazione definita già in SQL le relations avvengono senza problemi come da "manuale"…mentre se volessi associare 2tabelle che non sono associate a livello di DB?
[in riferimento al motivo principale dl’apertura di questo post]
ok ho "scoperto" perkè il server mi diceva questo:
//*** OUTPUT: Trying to get property of non-object
$utente = new Utenti();
$user = $utente->model()->findByPk($uid);
print $user->ruoliUtentis->sequIdRuoloResponsabilita->desc_ruolo;
specifico che l’errore sta al 100% alla relazione “ruoliUtentis” che è “HAS_MANY”, per scrupolo l’ho cambiata in “HAS_ONE”
e il tutto funziona come dovere!..solo che cè un piccolo particolare, che un utente può avere + ruoli e quindi mi SERVE HAS_MANY…alchè:
come si fà a prendere i dati da una relazione HAS_MANY seguendo la sintassi $oggetto->relazione_has_many->dato ?
devo per caso cambiare sintassi o cosa?
Grazie anticipatamente…scusate ma sto uscendo pazzo con questa relation…