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
8.0 KiB
Plaintext
176 lines
8.0 KiB
Plaintext
---
|
||
title: Créer des relations plusieurs-à-plusieurs
|
||
description: Reliez des enregistrements lorsque de nombreux éléments des deux côtés peuvent être associés ensemble au moyen d'objets de jonction.
|
||
---
|
||
|
||
Les relations plusieurs-à-plusieurs vous permettent de relier plusieurs enregistrements des deux côtés. Par exemple : de nombreuses Personnes peuvent travailler sur de nombreux Projets, et chaque Projet peut avoir de nombreuses Personnes.
|
||
|
||
<Warning>
|
||
**Fonctionnalité bêta** : Les relations de jonction sont actuellement en bêta. Activez-les dans **Paramètres → Communauté → Fonctionnalités** avant de suivre ce guide.
|
||
</Warning>
|
||
|
||
<Note>
|
||
Cette fonctionnalité exige également que le **mode avancé** soit activé (bascule en bas à gauche des Paramètres).
|
||
</Note>
|
||
|
||
## Quand utiliser les relations plusieurs-à-plusieurs
|
||
|
||
Utilisez plusieurs-à-plusieurs lorsque les deux côtés d'une relation peuvent avoir plusieurs connexions :
|
||
|
||
| Relation | Exemple |
|
||
| ------------------------ | ------------------------------------------------------------------------------------------------------- |
|
||
| Personnes ↔ Projets | Une personne travaille sur plusieurs projets ; un projet a plusieurs membres de l'équipe |
|
||
| Entreprises ↔ Étiquettes | Une entreprise peut avoir plusieurs étiquettes ; une étiquette peut s'appliquer à plusieurs entreprises |
|
||
| Produits ↔ Commandes | Un produit peut se trouver dans plusieurs commandes ; une commande contient plusieurs produits |
|
||
|
||
## Comment ça marche
|
||
|
||
Twenty utilise un modèle d'**objet de jonction** pour les relations plusieurs-à-plusieurs. Un objet de jonction se situe entre deux objets et conserve les connexions :
|
||
|
||
```
|
||
People ←→ Project Assignments ←→ Projects
|
||
```
|
||
|
||
L'objet **Affectations de projet** (jonction) comporte :
|
||
|
||
* Une relation vers Personnes (plusieurs-à-un)
|
||
* Une relation vers Projets (plusieurs-à-un)
|
||
|
||
Lorsque vous activez la bascule de relation de jonction, Twenty affiche directement les enregistrements liés au lieu d'afficher les enregistrements de jonction intermédiaires.
|
||
|
||
## Prérequis
|
||
|
||
1. **Activer les relations de jonction dans les fonctionnalités bêta** : Allez dans **Paramètres → Communauté → Fonctionnalités** et activez **Relations de jonction**
|
||
2. **Activer le mode avancé** : Activez le **mode avancé** via la bascule en bas à gauche de la barre latérale des Paramètres
|
||
3. Planifiez votre modèle de données :
|
||
* Quels sont les deux objets que vous connectez ?
|
||
* Comment doit s'appeler l'objet de jonction ?
|
||
|
||
## Étape 1 : Créer l'objet de jonction
|
||
|
||
D'abord, créez l'objet intermédiaire qui contiendra les connexions.
|
||
|
||
1. Allez dans **Paramètres → Modèle de données**
|
||
2. Cliquez sur **+ Ajouter un objet**
|
||
3. Donnez-lui un nom explicite (p. ex., "Affectation de projet", "Membre de l'équipe", "Commande de produit")
|
||
4. Activez l’option "Ignorer la création d’un champ Nom"
|
||
|
||
<img src="/images/user-guide/fields/new-pivot-object.png" alt="Nouvel objet de jonction" />
|
||
|
||
5. Cliquez sur **Enregistrer**
|
||
|
||
<Tip>
|
||
**Convention de nommage** : Utilisez un nom qui décrit la relation, comme "Affectation de projet" ou "Appartenance à l'équipe". Cela rend le modèle de données plus facile à comprendre.
|
||
</Tip>
|
||
|
||
## Étape 2 : Créer des relations entre les objets et l’objet de jonction
|
||
|
||
Ajoutez des champs de relation depuis chacun de vos deux objets vers l’objet de jonction.
|
||
|
||
### Première relation (Objet A → Jonction)
|
||
|
||
1. Sélectionnez votre premier objet dans **Paramètres → Modèle de données**
|
||
2. Cliquez sur **+ Ajouter une relation**
|
||
3. Sélectionnez l’objet de jonction (p. ex., "Affectations de projet")
|
||
4. Définissez le type de relation sur **Un-à-plusieurs** (une personne peut être liée à de nombreuses affectations)
|
||
5. Nommez les champs :
|
||
* Champ sur Personnes : p. ex., "Affectations de projet"
|
||
* Champ sur la jonction : p. ex., "Personne"
|
||
6. Cliquez sur **Enregistrer**
|
||
|
||
### Deuxième relation (Objet B → Jonction)
|
||
|
||
1. Sélectionnez votre deuxième objet dans **Paramètres → Modèle de données**
|
||
2. Cliquez sur **+ Ajouter une relation**
|
||
3. Sélectionnez l’objet de jonction (p. ex., "Affectations de projet")
|
||
4. Définissez le type de relation sur **Un-à-plusieurs** (un projet peut être lié à de nombreuses affectations)
|
||
5. Activez **"Il s'agit d'une relation vers un objet de jonction"**
|
||
|
||
<img src="/images/user-guide/fields/junction-relation-toggle.png" style={{width:'100%'}} />
|
||
|
||
6. Nommez les champs :
|
||
* Champ sur la jonction : p. ex., "Projet"
|
||
* Champ sur Projets : p. ex., "Membres de l'équipe"
|
||
7. Cliquez sur **Enregistrer**
|
||
|
||
## Étape 3 : Configurer l'affichage de la relation de jonction
|
||
|
||
Configurez maintenant les objets sources pour afficher directement les enregistrements liés, en ignorant l'objet de jonction intermédiaire.
|
||
|
||
1. Allez dans **Paramètres → Modèle de données**
|
||
2. Sélectionnez le premier objet (p. ex., "Personnes")
|
||
3. Recherchez le champ de relation pointant vers l'objet de jonction (p. ex., "Affectations de projet")
|
||
4. Cliquez pour modifier le champ
|
||
5. Activez **"Il s'agit d'une relation vers un objet de jonction"**
|
||
6. Sélectionnez la **relation cible** (p. ex., "Projet" — le champ sur la jonction qui pointe vers l'autre côté)
|
||
7. Cliquez sur **Enregistrer**
|
||
|
||
## Résultat
|
||
|
||
Après configuration :
|
||
|
||
* Sur un enregistrement **Personne**, le champ "Affectations de projet" affiche directement les **Projets** (et non les enregistrements d'affectation)
|
||
* Sur un enregistrement **Projet**, le champ "Membres de l'équipe" affiche directement les **Personnes**
|
||
|
||
L'objet de jonction existe toujours et stocke les connexions, mais l'interface présente une vue plusieurs-à-plusieurs plus épurée.
|
||
|
||
## Exemple : Personnes ↔ Projets
|
||
|
||
Voici un guide complet :
|
||
|
||
### Créer l'objet de jonction
|
||
|
||
* Nom : **Affectation de projet**
|
||
* Description : "Associe les personnes aux projets sur lesquels elles travaillent"
|
||
|
||
### Ajouter des relations
|
||
|
||
1. **Personnes → Affectation de projet**
|
||
* Type : Un-à-plusieurs
|
||
* Champ sur Personnes : "Affectations de projet"
|
||
* Champ sur Affectation : "Personne"
|
||
|
||
2. **Projets → Affectation de projet**
|
||
* Type : Un-à-plusieurs
|
||
* Champ sur Projets : "Membres de l'équipe"
|
||
* Champ sur Affectation : "Projet"
|
||
|
||
### Configurer l'affichage de la jonction
|
||
|
||
1. Sur l'objet **Personnes** :
|
||
* Modifiez le champ "Affectations de projet"
|
||
* Activez la bascule de jonction
|
||
* Cible : "Projet"
|
||
|
||
2. Sur l'objet **Projets** :
|
||
* Modifiez le champ "Membres de l'équipe"
|
||
* Activez la bascule de jonction
|
||
* Cible : "Personne"
|
||
|
||
### Utilisez-le
|
||
|
||
* Ouvrez un enregistrement Personne → Voyez directement ses Projets
|
||
* Ouvrez un enregistrement Projet → Voyez directement les membres de l'équipe
|
||
* Créez de nouvelles connexions depuis les deux côtés
|
||
|
||
## Ajout de données supplémentaires aux connexions
|
||
|
||
Comme l'objet de jonction est un véritable objet, vous pouvez ajouter des champs personnalisés pour stocker des informations sur la relation :
|
||
|
||
* **Rôle** : "Développeur", "Designer", "Responsable"
|
||
* **Date de début** : lorsque la personne a rejoint le projet
|
||
* **Heures allouées** : Heures hebdomadaires sur ce projet
|
||
|
||
Pour accéder à ces données, accédez directement à l'objet de jonction ou interrogez-le via l'API.
|
||
|
||
## Limitations
|
||
|
||
* **Import/Export CSV** : L'importation directe de relations plusieurs-à-plusieurs n'est pas prise en charge. Importez plutôt des enregistrements dans l'objet de jonction.
|
||
* **Filtres** : Le filtrage par relations plusieurs-à-plusieurs peut offrir des options limitées.
|
||
|
||
## Articles connexes
|
||
|
||
* [Champs de relation](/l/fr/user-guide/data-model/capabilities/relation-fields) — types de relation expliqués
|
||
* [Créer des objets personnalisés](/l/fr/user-guide/data-model/how-tos/create-custom-objects) — comment créer des objets
|
||
* [Créer des champs de relation](/l/fr/user-guide/data-model/how-tos/create-relation-fields) — configuration de base des relations
|