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,986
  • 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

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