Passer au contenu principal
Les relations relient deux objets entre eux. Dans Twenty, les relations sont toujours bidirectionnelles — chaque relation a deux côtés, et chaque côté est déclaré comme un champ qui référence l’autre.

Fonctionnement des relations

Chaque relation nécessite deux champs qui se référencent mutuellement :
  1. Le côté MANY_TO_ONE — réside sur l’objet qui détient la clé étrangère.
  2. Le côté ONE_TO_MANY — réside sur l’objet qui possède la collection.
Les deux champs utilisent FieldType.RELATION et se référencent mutuellement via relationTargetFieldMetadataUniversalIdentifier.

Exemple : une carte postale a de nombreux destinataires

Un PostCard peut être envoyé à de nombreux enregistrements PostCardRecipient. Chaque destinataire appartient à exactement une carte postale. Étape 1: Définir le côté ONE_TO_MANY sur PostCard (le côté “one”) :
src/fields/post-card-recipients-on-post-card.field.ts
Étape 2: Définir le côté MANY_TO_ONE sur PostCardRecipient (le côté “many” — détient la clé étrangère) :
src/fields/post-card-on-post-card-recipient.field.ts
Imports circulaires : les deux champs de relation se référencent l’un l’autre via leur universalIdentifier. Pour éviter les problèmes d’import circulaire, exportez les ID de vos champs en tant que constantes nommées depuis chaque fichier, puis importez-les dans l’autre. Le système de build les résout au moment de la compilation.

Relation avec des objets standard

Pour créer une relation avec un objet Twenty intégré (Person, Company, etc.), utilisez STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS :
src/fields/person-on-self-hosting-user.field.ts

Propriétés des champs de relation

Champs de relation en ligne

Vous pouvez également déclarer une relation directement à l’intérieur de defineObject. Lorsqu’il est en ligne, omettez objectUniversalIdentifier — il est hérité de l’objet parent :