Relazioni tra Entità
Nella Guida precedente abbiamo visto come creare una Vista che elenca un tipo di Entità (es. gli Attrezzi della app Vicinato) con i loro Campi. Vediamo ora come mostrate nella stessa Vista informazioni prese dai Campi di altre Entità collegate alle Entità principali della Vista da relazioni.
Una Entità A è in relazione con una Entità B se l'Entità A ha un Campo Riferimento che richiama l'Entità B. Rappresentiamo questa relazione come A → B perché, conoscendo l'Entità A, possiamo arrivare all'Entità B leggendo il contenuto del Campo di A.
Aggiungere relazioni nella Vista (sezione Relazioni)
Utilizzeremo la relazione A→B per aggiungere ad una Vista che elenca le Entità di tipo A anche le informazioni contenute nei Campi delle Entità di tipo B. Per utilizzare una relazione in una Vista occorre aggiungere nella sezione Relazioni della Vista il Campo di A che regge la relazione. Ad esempio, nella Vista "Magazzino" della app "Vicinato" che abbiamo creato nella Guida precedente e che elenca gli Attrezzi, possiamo utilizzare la relazione Attrezzo → Autore (retta dal Campo predefinito "Autore" dell'Attrezzo) per aggiungere informazioni sul Proprietario dell'Attrezzo. Ecco come:
| aggiungi la relazione | Nella sezione Relazioni clicca Aggiungi. Cerca "autore" e seleziona Contenuto - Utente - Nome utente dell'autore del contenuto.
|
| configura la relazione | Nella finestra di configurazione del Campo, come titolo amministrativo della relazione puoi digitare "Proprietario", per ricordarti che l'Utente così selezionato è il Proprietario dell'Attrezzo. |
Usare le relazioni nella Vista
Aggiunta una relazione A→B nella sezione Relazioni, per usare nelle altre sezioni della Vista i Campi dell'Entità B basta selezionare la relazione nella finestra di configurazione del Campo. Ad esempio, per aggiungere nella sezione Campi della Vista "Magazzino" il nome del Proprietario a fianco di ogni Attrezzo:
| aggiungi il nome del proprietario dell'Attrezzo | Nella sezione Campi clicca Aggiungi. Seleziona il Campo Utente - Nome - Il nome dell'utente o dell'autore e come Relazione seleziona "Proprietario". Come Etichetta digita "Proprietario" |
Relazioni concatenate
Nella sezione Relazioni è possibile aggiungere un numero qualunque di Relazioni, ognuna corrispondente ad un Campo riferimento dell'Entità principale della Vista. E' anche possibile costruire relazioni concatenate tra loro, cioè relazioni che consentono di passare da una Entità A all'Entità B e da questa ad una Entità C e così via.
Ad esempio, nella app "Vicinato" un Prestito ha un campo riferimento "Richiesta" che specifica a quale Richiesta il Prestito risponde (Prestito → Richiesta). A sua volta, la Richiesta ha un campo riferimento "Attrezzo" che rimanda all'Attrezzo richiesto (Richiesta → Attrezzo). Quindi, percorrendo la catena di relazioni Prestito → Richiesta, Richiesta → Attrezzo possiamo conoscere l'Attrezzo oggetto del Prestito senza duplicare questa informazione nell'Entità Prestito.
Se stiamo costruendo una Vista che elenca i Prestiti e vogliamo mostrare per ciascuno di essi la Richiesta cui risponde e l'Attrezzo prestato, nella sezione Relazioni aggiungeremo prima la relazione Prestito → Richiesta e dopo la relazione Richiesta → Attrezzo, indicando che quest'ultima è basata sulla relazione che la precede. L'ordine in cui sono elencate le relazioni nella sezione Relazioni è quindi importante.
Vediamo come si fa:
| crea la Vista | In Struttura - Viste clicca Aggiungi nuova vista e digita il nome della nuova vista (es. "Prestiti"). In Mostra seleziona il tipo di Entità da elencare (es. contenuto di tipo "Prestito"). Attiva la creazione di una Pagina, mostra il risultato come Tabella o Responsive Grid. In Elementi da visualizzare scegli quanti elementi mostrare per pagina (es. 20) e attiva Usare un paginatore. Salva. |
| aggiungi la relazione Prestito → Richiesta | Nella sezione Relazioni aggiungi il Campo riferimento di Prestito che richiama la sua Richiesta: Contenuto - Contenuto referenziato da field_richiesta_prestito - Appare in: prestito. Rinomina questa relazione come "richiesta" perché, attraverso di essa, si arriva alla Richiesta associata al Prestito. |
| aggiungi la relazione Richiesta → Attrezzo | Nella sezione Relazioni aggiungi il Campo riferimento di Richiesta che richiama l'Attrezzo: Contenuto - Contenuto referenziato da field_attrezzo_richiesta - Appare in: richiesta. Nella configurazione del Campo come Relazione seleziona "richiesta": è questo passaggio che concatena questa relazione alla precedente. Rinomina la nuova relazione come "attrezzo" perché permette di arrivare all'Attrezzo prestato. ![]() |
| utilizza le informazioni di tutte le Entità relazionate | Nella sezioni Campi aggiungi il Campo Titolo ed etichettalo "Prestito". Aggiungi un altro Campo Titolo, nella sua configurazione come Relazione seleziona "richiesta" ed etichettalo "Richiesta". Aggiungi un altro Campo Titolo, nella sua configurazione come Relazione seleziona "attrezzo" ed etichettalo "Attrezzo". |
| cerca i Prestiti su uno specifico Attrezzo | Nella sezione Criteri del filtro aggiungi il Campo Titolo, come Relazione seleziona Attrezzo, esponi il Filtro, come Operatore seleziona contiene ogni parola: nella Vista appare una finestra di ricerca in cui, digitando parte del nome dell'Attrezzo, vengono mostrati solo i Prestiti relativi a quell'Attrezzo. |
Relazioni inverse
Data una relazione A→ B, è anche possibile utilizzarla in senso inverso per risalire da B ad A. Ad esempio, nella app Vicinato vogliamo una Vista che elenca le Richieste e, a fianco di ciascuna di esse, l'eventuale Prestito concesso: poiché la relazione disponibile è Prestito → Richiesta, dovremo usare questa relazione in senso inverso per passare dalla Richiesta al Prestito. Per usare la relazione in senso inverso, nella sezione Relazioni anziché aggiungere il Campo:
Contenuto - Contenuto referenziato da field_richiesta_prestito - Appare in: prestito.
aggiungiamo il Campo:
Contenuto - Contenuto che usa field_attrezzo_richiesta - Relate each Contenuto with a field_attrezzo_richiesta set to the content item.
| ATTENZIONE : Usando la relazione A → B in senso diretto, data l'Entità A si trova una sola Entità B (a meno che il Campo Riferimento di A ammetta più valori di B). Usandola in senso inverso, potrebbe capitare che identifichi più Entità A. Ad esempio, se l'Entità "Disco" ha un Campo "Cantante" che ammette un solo valore, la relazione Disco → Cantante restituisce un solo Cantante; ma se usiamo la relazione in senso inverso potrebbe restituire più di un Disco, cioè tutti i Dischi di quel Cantante. |


