La gestione delle relazioni tra tabelle: le associazioni

Una delle più potenti funzioni offerte da CakePHP è la gestione delle relazioni fornita dai modelli. Ci sono quattro tipi di associazioni che si possono impiegare:

  • hasOne
  • hasMany
  • belongsTo
  • hasAndBelongsToMany

Si prenda come esmpio un sitema di gestione utenti di un blog.

hasOne
rappresenta la relazione uno-a-uno e potrebbe essere utilizzato per associare un profilo ad ogni utente.

hasMany
relazione uno-a-molti, nel nostro blog potrebbe rappresentare la relazione tra gli utenti e i commenti che hanno inserito

belongsTo
rappresenta il legame tra un modello collegato con quello “collegante”. Ad esempio ogni commento belongsTo utente

hasAndBelongsToMany
relazione molti-a-molti; un commento potrebbe essere associato a più categorie e una categoria richiamata da più commenti.

Riferimento al manuale
http://manual.cakephp.org/chapter/models#association

3 comments for “La gestione delle relazioni tra tabelle: le associazioni

  1. 13 febbraio 2009 at 16:23

    Ne avevo parlato su cakephp-it.org comunque grazie lo stesso per la risposta :) è sempre bene ripetere i concetti affinchè ti entrino nel cervello ^^

  2. 13 febbraio 2009 at 9:12

    Ciao cesconix, scusa se ti rispondo solo ora.
    La differenza è semplice e il concetto è lo stesso delle relazioni tra le tabelle dei database.

    hasOne : immagina un model User che rappresenta l’anagrafica degli utenti per accedere a un forum per il quale è obbligatorio inserire nickname, password e e-mail, mentre è facoltativo inserire dati come nome e cognome veri, MSN, avatar, ecc.
    Questi campi che non verranno compilati da tutti gli utenti, andranno in una tabella Profile che riserverà al più un record per ogni record esistente nella model User.
    In questo caso si può dire che “User hasOne Profile” e tra i campi di Profile ci sarà anche il campo “user_id”.

    Questo consente di reperire facilmente i dati dal model Profile: quando si legge il record che ci interessa dall’User, si ottengono anche i campi del record associato nel profilo (recursive permettendo).

    belongsTo è uno strumento di Cake che ti permette di leggere i dati in direzione inversa, ovvero se leggi i dati dal profilo, puoi ottenere anche i dati dell’utente in modo veloce e immediato (sempre recursive permettendo).

    Allo stesso modo vale con hasMany, solo che il collegamento tra record tra due tabelle è di uno-a-molti invece che uno-a-uno.
    Immagina sempre i model User e Post, User hasMany Post e poi Post belongsTo User.
    Ciò significa che quando recuperi i dati di un utente, ottieni tutti i post collegati a quell’utente e, se imposti il belongsTo, leggendo un record di Posts ottieni i dati dell’utente collegato.
    Spero di essere stato chiaro.

  3. cesconix
    6 febbraio 2009 at 17:12

    Ciao,
    complimenti per il blog, arrivo ad entrarci spesso tramite google cercando materiale sul framework in questione.
    Volevo chiederti se puoi essere un po’ più dettagliato nel spiegare la differenza tra belongsTo e hasOne.

    Grazie. Saluti.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *