Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 3s
176 lines
7.5 KiB
Plaintext
176 lines
7.5 KiB
Plaintext
---
|
|
title: Crea relazioni molti-a-molti
|
|
description: Collega record in cui molti elementi su entrambi i lati possono essere collegati tra loro utilizzando oggetti di giunzione.
|
|
---
|
|
|
|
Le relazioni molti-a-molti ti consentono di collegare più record su entrambi i lati. Ad esempio: molte Persone possono lavorare su molti Progetti, e ogni Progetto può avere molte Persone.
|
|
|
|
<Warning>
|
|
**Funzionalità beta**: Le relazioni di giunzione sono attualmente in beta. Abilita le in **Impostazioni → Community → Funzionalità** prima di seguire questa guida.
|
|
</Warning>
|
|
|
|
<Note>
|
|
Questa funzionalità richiede anche che la **Modalità avanzata** sia abilitata (tramite l'interruttore in basso a sinistra nelle Impostazioni).
|
|
</Note>
|
|
|
|
## Quando usare le relazioni molti-a-molti
|
|
|
|
Usa le relazioni molti-a-molti quando entrambi i lati di una relazione possono avere più collegamenti:
|
|
|
|
| Relazione | Esempio |
|
|
| ------------------ | ------------------------------------------------------------------------------ |
|
|
| Persone ↔ Progetti | Una persona lavora su più progetti; un progetto ha più membri del team |
|
|
| Aziende ↔ Tag | Un'azienda può avere più tag; un tag può essere applicato a più aziende |
|
|
| Prodotti ↔ Ordini | Un prodotto può essere presente in più ordini; un ordine contiene più prodotti |
|
|
|
|
## Come Funziona
|
|
|
|
Twenty utilizza un modello di **oggetto di giunzione** per le relazioni molti-a-molti. Un oggetto di giunzione si trova tra due oggetti e contiene i collegamenti:
|
|
|
|
```
|
|
People ←→ Project Assignments ←→ Projects
|
|
```
|
|
|
|
L'oggetto **Assegnazioni ai progetti** (di giunzione) ha:
|
|
|
|
* Una relazione con Persone (molti-a-uno)
|
|
* Una relazione con Progetti (molti-a-uno)
|
|
|
|
Quando abiliti l'interruttore della relazione di giunzione, Twenty mostra direttamente i record collegati invece di visualizzare i record intermedi di giunzione.
|
|
|
|
## Prerequisiti
|
|
|
|
1. **Abilita le relazioni di giunzione nelle funzionalità beta**: Vai a **Impostazioni → Community → Funzionalità** e abilita **Relazioni di giunzione**
|
|
2. **Abilita la Modalità avanzata**: Attiva la **Modalità avanzata** in basso a sinistra nella barra laterale delle Impostazioni
|
|
3. Pianifica il tuo modello di dati:
|
|
* Quali due oggetti stai collegando?
|
|
* Come dovrebbe chiamarsi l'oggetto di giunzione?
|
|
|
|
## Passaggio 1: Crea l'oggetto di giunzione
|
|
|
|
Per prima cosa, crea l'oggetto intermedio che conterrà i collegamenti.
|
|
|
|
1. Vai a **Impostazioni → Modello dati**
|
|
2. Clicca su **+ Aggiungi oggetto**
|
|
3. Assegnagli un nome descrittivo (ad es., "Assegnazione al progetto", "Membro del team", "Ordine del prodotto")
|
|
4. Attiva l'opzione "Salta la creazione di un campo Nome"
|
|
|
|
<img src="/images/user-guide/fields/new-pivot-object.png" alt="Nuovo oggetto pivot" />
|
|
|
|
5. Clicca su **Salva**
|
|
|
|
<Tip>
|
|
**Convenzione di denominazione**: Usa un nome che descriva la relazione, come "Assegnazione al progetto" o "Appartenenza al team". Questo rende il modello di dati più facile da comprendere.
|
|
</Tip>
|
|
|
|
## Passaggio 2: Crea relazioni tra gli oggetti e l'oggetto di giunzione
|
|
|
|
Aggiungi campi di relazione da ciascuno dei due oggetti all'oggetto di giunzione.
|
|
|
|
### Prima relazione (Oggetto A → Oggetto di giunzione)
|
|
|
|
1. Seleziona il tuo primo oggetto in **Impostazioni → Modello dati**
|
|
2. Fai clic su **+ Aggiungi relazione**
|
|
3. Seleziona l'oggetto di giunzione (ad es., "Assegnazioni al progetto")
|
|
4. Imposta il tipo di relazione su **Uno-a-molti** (una persona può collegarsi a molte assegnazioni)
|
|
5. Assegna un nome ai campi:
|
|
* Campo su Persone: ad es., "Assegnazioni ai progetti"
|
|
* Campo sull'oggetto di giunzione: ad es., "Persona"
|
|
6. Clicca su **Salva**
|
|
|
|
### Seconda relazione (Oggetto B → Oggetto di giunzione)
|
|
|
|
1. Seleziona il tuo secondo oggetto in **Impostazioni → Modello dati**
|
|
2. Fai clic su **+ Aggiungi relazione**
|
|
3. Seleziona l'oggetto di giunzione (ad es., "Assegnazioni al progetto")
|
|
4. Imposta il tipo di relazione su **Uno-a-molti** (un progetto può collegarsi a molte assegnazioni)
|
|
5. Abilita **"Questa è una relazione con un oggetto di giunzione"**
|
|
|
|
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
|
|
|
|
6. Assegna un nome ai campi:
|
|
* Campo sull'oggetto di giunzione: ad es., "Progetto"
|
|
* Campo su Progetti: ad es., "Membri del team"
|
|
7. Clicca su **Salva**
|
|
|
|
## Passaggio 3: Configura la visualizzazione della relazione di giunzione
|
|
|
|
Ora configura gli oggetti sorgente per visualizzare direttamente i record collegati, saltando l'oggetto di giunzione intermedio.
|
|
|
|
1. Vai a **Impostazioni → Modello dati**
|
|
2. Seleziona il primo oggetto (ad es., "Persone")
|
|
3. Trova il campo di relazione che punta all'oggetto di giunzione (ad es., "Assegnazioni ai progetti")
|
|
4. Fai clic per modificare il campo
|
|
5. Abilita **"Questa è una relazione con un oggetto di giunzione"**
|
|
6. Seleziona la **Relazione di destinazione** (ad es., "Progetto" — il campo sull'oggetto di giunzione che punta all'altro lato)
|
|
7. Clicca su **Salva**
|
|
|
|
## Risultato
|
|
|
|
Dopo la configurazione:
|
|
|
|
* In un record **Persona**, il campo "Assegnazioni ai progetti" mostra direttamente i **Progetti** (non i record di assegnazione)
|
|
* In un record **Progetto**, il campo "Membri del team" mostra direttamente le **Persone**
|
|
|
|
L'oggetto di giunzione esiste ancora e memorizza i collegamenti, ma l'interfaccia utente presenta una vista molti-a-molti più pulita.
|
|
|
|
## Esempio: Persone ↔ Progetti
|
|
|
|
Ecco una procedura completa:
|
|
|
|
### Crea l'oggetto di giunzione
|
|
|
|
* Nome: **Assegnazione al progetto**
|
|
* Descrizione: "Collega le persone ai progetti su cui lavorano"
|
|
|
|
### Aggiungi relazioni
|
|
|
|
1. **Persone → Assegnazione al progetto**
|
|
* Tipo: Uno-a-molti
|
|
* Campo su Persone: "Assegnazioni ai progetti"
|
|
* Campo su Assegnazione: "Persona"
|
|
|
|
2. **Progetti → Assegnazione al progetto**
|
|
* Tipo: Uno-a-molti
|
|
* Campo su Progetti: "Membri del team"
|
|
* Campo su Assegnazione: "Progetto"
|
|
|
|
### Configura la visualizzazione della giunzione
|
|
|
|
1. Sull'oggetto **Persone**:
|
|
* Modifica il campo "Assegnazioni ai progetti"
|
|
* Abilita l'interruttore di giunzione
|
|
* Destinazione: "Progetto"
|
|
|
|
2. Sull'oggetto **Progetti**:
|
|
* Modifica il campo "Membri del team"
|
|
* Abilita l'interruttore di giunzione
|
|
* Destinazione: "Persona"
|
|
|
|
### Usalo
|
|
|
|
* Apri un record Persona → vedi direttamente i relativi Progetti
|
|
* Apri un record Progetto → vedi direttamente i membri del team
|
|
* Crea nuove connessioni da entrambi i lati
|
|
|
|
## Aggiungere dati alle connessioni
|
|
|
|
Poiché l'oggetto di giunzione è un vero oggetto, puoi aggiungere campi personalizzati per memorizzare informazioni sulla relazione:
|
|
|
|
* **Ruolo**: "Sviluppatore", "Designer", "Responsabile"
|
|
* **Data di inizio**: Quando la persona è entrata nel progetto
|
|
* **Ore assegnate**: ore settimanali su questo progetto
|
|
|
|
Per accedere a questi dati, vai direttamente all'oggetto di giunzione oppure interrogalo tramite l'API.
|
|
|
|
## Limitazioni
|
|
|
|
* **Importazione/Esportazione CSV**: L'importazione diretta di relazioni molti-a-molti non è supportata. Importa invece i record nell'oggetto di giunzione.
|
|
* **Filtri**: Il filtraggio in base a relazioni molti-a-molti potrebbe avere opzioni limitate.
|
|
|
|
## Correlati
|
|
|
|
* [Campi di relazione](/l/it/user-guide/data-model/capabilities/relation-fields) — tipi di relazione spiegati
|
|
* [Crea oggetti personalizzati](/l/it/user-guide/data-model/how-tos/create-custom-objects) — come creare oggetti
|
|
* [Crea campi di relazione](/l/it/user-guide/data-model/how-tos/create-relation-fields) — configurazione di base della relazione
|