Como as relações funcionam
Toda relação requer dois campos que façam referência um ao outro:- O lado MANY_TO_ONE — fica no objeto que contém a chave estrangeira.
- O lado ONE_TO_MANY — fica no objeto que possui a coleção.
FieldType.RELATION e fazem referência cruzada um ao outro via relationTargetFieldMetadataUniversalIdentifier.
Exemplo: Um cartão postal tem muitos destinatários
UmPostCard pode ser enviado para muitos registros PostCardRecipient. Cada destinatário pertence a exatamente um cartão postal.
Etapa 1: Defina o lado ONE_TO_MANY em PostCard (o lado “um”):
src/fields/post-card-recipients-on-post-card.field.ts
src/fields/post-card-on-post-card-recipient.field.ts
Importações circulares: ambos os campos de relação fazem referência ao
universalIdentifier um do outro. Para evitar problemas de importação circular, exporte os IDs dos seus campos como constantes nomeadas de cada arquivo e importe-os no outro. O sistema de build resolve isso em tempo de compilação.Relações de junção
Um objeto de junção conecta um registro de origem a um ou mais registros de destino. Por exemplo,PostCardRecipient pode conter tanto uma relação postCard quanto uma relação recipient. No campo ONE_TO_MANY do objeto de origem, defina junctionTargetFieldUniversalIdentifier como o campo de relação no objeto de junção que aponta para o destino:
RECIPIENT_FIELD_ID deve identificar uma relação MANY_TO_ONE ou morph no objeto de junção. Isso informa ao Twenty qual registro relacionado é o destino quando um recurso como distribuição de atividade da linha do tempo percorre a junção.
Relacionando a objetos padrão
Para criar uma relação com um objeto integrado do Twenty (Person, Company, etc.), useSTANDARD_OBJECT_UNIVERSAL_IDENTIFIERS:
src/fields/person-on-self-hosting-user.field.ts
Propriedades de campos de relação
Campos de relação inline
Você também pode declarar uma relação diretamente dentro dedefineObject. Quando estiver inline, omita objectUniversalIdentifier — ele é herdado do objeto pai: