prendere i dati delle relations

Ciao ragazzi,

domanda "concettuale": a seguito della chiamata a "findByPk()"


$row = Utenti::model()->findByAttributes( 'username_pippo' );

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" ?

…anche se esiste una guida o qualcosa di simile

Grazie in anticipo!!




$row = Utenti::model()->findByAttributes(array('username'=>'username_pippo'));

Grazie per l’interessamento Rajith R,

in effetti ho postato male la funzione io già uso correttamente:


$row = Utenti::model()->findByAttributes( array('desc_nome_utente'=>$this->username) );

credo di essermi espresso male, il mio problema non sta nel findByPk ma dall’oggetto che da questa funzione ne ritorna,

o meglio, ad esempio ho provato a var_dump-are $row e ho una sfilza di roba che ovviamente include tutto e di +…

ma come è possibile prendere i dati che scaturiscono dalle relazioni?

in realtà ciò che è il tuo problema?

ok, allora:

  • ho un oggetto del model user
  • 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?



is posts is another model?

then u need to use findall with join…

findAll->with(relation name in posts)-> …

like this…

in questo modo …

ricerca di esempi findAll->with()

ok!

grazie!

proverò e posterò qui se la cosa è stata risolta o meno!

Grazie Rajith!

okay…

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” :


		$rs = Yii::app()->db->createCommand()

			->setFetchMode(PDO::FETCH_OBJ)

			->select('r.sequ_idruolo,r.codi_codruolo,f.codi_idfunzionalita')

			->from(	'd_utenti u,

					d_ruoli_utenti ru,

					d_ruoli r,

					d_ruoli_funzionalita rf,

					d_funzionalita f')

			->where(array(

							'and',

							'u.cod_codice_fiscale = :codice_fiscale',

							'ru.cod_codice_fiscale = u.cod_codice_fiscale',

							'ru.sequ_id_ruolo_utente = r.sequ_idruolo',

							'rf.fk_sequ_idruolo = r.sequ_idruolo',

							'rf.fk_codi_idfunzionalita = f.codi_idfunzionalita'),

					array( 	':codice_fiscale'=>$user->cod_codice_fiscale))

			->queryAll();

se conoscete una soluzione di livello + alto vi prego consigliatemela pure!

Domanda finale:

Ma se ho un model relazionato con altri, qual’è la “best-practice” per ottenere tutti i dati compresi quelli relaizionati appunto?

…se avete guide e/o suggerimenti vi ringrazierò all’infinito :D

Provo a fare un esempio.

Ottengo un oggetto da una query:




    $utente = Utente::model()->findByPk(33);



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’




    echo $utente->regione->qualcosa->nome;



e così via

Grazie!

che poi è come avevo fatto all’inizio, come sospettavo,

l’errore quindi dovrà stare nello specificare le relations…

Ciao ho un’ultima domanda riguardo le relations,

  • è 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?

come al solito Grazie in anticipo!

[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 anticipatamentescusate ma sto uscendo pazzo con questa relation:o

Apri un altro thread. Altrimenti ci leggiamo solo io e te =). E gli altri, se sono interessati, non posso dare o ricevere conoscenza =).