Yii Framework Forum: Relazioni Con Tabelle Db - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Relazioni Con Tabelle Db Rate Topic: -----

#1 User is offline   felix_the_cat 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 18-September 12

Posted 03 July 2013 - 07:18 AM

Ciao a tutti, ho ricominciato a studiare Yii, e mi sono imbattuto, nelle "relazioni" tra tabelle...
Ho letto il manuale, credo di aver capito (un pochino), ma mi manca un esempio concreto...
Forse faccio prima a spiegare cosa vorrei fare e cosa ho fatto, inoltre vi chiedo quale dei due metodi è il migliore. (vedere avanti)

Ho un db con tre tabelle (potevo realizzarle in modo diverso, ma è per lo studio, quindi credo che vadano bene)

libro
id | autore

libro_genere
id | id_libro | genere

libro_titolo
id | id_libro | titolo

Ovviamente vorrei che queste tre tabelle entrino in relazione tra loro, come dovrei procedere?
Creo 3 model | libro | libro_genere | libro_titolo
quindi in ogni model dovrei creare una relazione (relations())? oppure le relazioni dovrei inserirle solo in libro_genere e libro_titolo?
Per ora con le domande sulle relazioni 'standard' mi fermo qui.

Io ho agito diversamente, creando nel solo model libro il seguente codice che funziona perfettamente.
$query = Yii::app()->db->createCommand()
    ->select('l.id, lg.genere, tl.titolo')
    ->from('libro l')
    ->join('libro_genere lg', 'l.id = lg.id_libro')
    ->join('libro_titolo tl', 'l.id = tl.id_libro')
    ->where(array('tl.titolo LIKE :titolo') , array(':titolo'=>'Il Signore%'))
    ->queryAll();


Ma non è meglio utilizzare le funzionalità di yii per le relazioni?

Grazie

ps. potrei essere un pochino confuso, ma lo sono veramente :rolleyes:
0

#2 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,988
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 06 July 2013 - 02:26 AM

Le tabelle sono sbagliate. Se si tratta di studio vanno corrette a maggior ragione. Tu trascura l'apprendimento, e ti porterai dietro tanti brutti vizi. Questa è una base di dati corretta. L'errere più grosso che hai fatto è stato fare si che un libro potesse avere più titoli. In verità è vero che un autore più avere più libri.

libro_autore
id | cognome | nome

libro
id | fk_libro_autore | fk_genere | titolo

libro_genere
id | genere


Hai scritto

Quote

Ma non è meglio utilizzare le funzionalità di yii per le relazioni?
e devo farti notare che anche tu stai usando le funzionalità di Yii. Che cosa volevi dire con quella frase?

Detto ciò, sappi che ci sono due modi principali per eseguire delle interrogazioni all'interno di Yii. Una è usando l'active record ed un'altra è quella di usare il query builder. Ti racconto la via del query builder perché secondo me è più semplice da comprendere. In buona sostanza una classe PHP equivale alla tabella mentre un oggetto php corrisponde ad un singolo record.
Arrivati a questo punto, io ti suggerisco di andare nel model Libro ed aggiungere queste due relazioni:
Libro
    'genere' => array(self::BELONGS_TO, 'LibroGenere', 'fk_genere'),
    'autore' => array(self::BELONGS_TO, 'LibroAutore', 'fk_libro_autore ')


A queesto punto la tua query può diventare:
Libri::model()->with('genere:autore')->findAll();

0

#3 User is offline   antonior14 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 20
  • Joined: 26-March 15

Posted 19 July 2015 - 12:25 PM

salve anch'io mi sto imbattendo in questi prime problematiche che sono soprattutto nel fatto che cerco di adottare delle best practice perchè penso che yii sia davvero ottimizzato per lo sviluppo di web app... :D

Come tutti qualli che cominciano come me ho creato delle tabelle e relazionate, e creato un CRUD con gii e su questo cominciato a comprendere il form

vado al dunque!

Come posso visualizzare nel form di modifica/creazione il campo oggetto di relazione con un altra tabella?

vorrei ottenere magari una select list con il valore di default corrispondente al valore memorizzato nella tabella e listare altri valori

I miei dubbi sono come passare la lista model da ciclare tipo ad esempio "genere"
Come includere il model "genere" nel model libri ad esempio con qui è relazionato

poichè gii non mi crea relazioni BELONGS_TO ma delle hasOne,hasMany(da sostituire?)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users