관계 작동 방식
모든 관계에는 서로를 참조하는 두 개의 필드가 필요합니다:- MANY_TO_ONE 측 — 외래 키를 보유한 객체에 존재합니다.
- ONE_TO_MANY 측 — 컬렉션을 소유한 객체에 존재합니다.
FieldType.RELATION을 사용하며 relationTargetFieldMetadataUniversalIdentifier를 통해 서로를 교차 참조합니다.
예시: Post Card에는 여러 수신자가 있습니다
PostCard는 여러 PostCardRecipient 레코드에 전송될 수 있습니다. 각 수신자는 정확히 하나의 Post Card에 속합니다.
1단계: PostCard에서 ONE_TO_MANY 측을 정의합니다 (“one” 측):
src/fields/post-card-recipients-on-post-card.field.ts
src/fields/post-card-on-post-card-recipient.field.ts
순환 임포트: 두 관계 필드는 서로의
universalIdentifier를 참조합니다. 순환 임포트 문제를 피하려면, 각 파일에서 필드 ID를 명명된 상수로 export하고 다른 파일에서 import하세요. 빌드 시스템은 컴파일 시점에 이를 해결합니다.중간 관계들
중간 객체는 하나의 소스 레코드를 하나 이상의 대상 레코드에 연결합니다. 예를 들어,PostCardRecipient는 postCard 관계와 recipient 관계를 모두 포함할 수 있습니다. 소스 객체의 ONE_TO_MANY 필드에서 junctionTargetFieldUniversalIdentifier를 대상 객체를 가리키는 중간 객체의 관계 필드로 설정합니다:
RECIPIENT_FIELD_ID는 중간 객체의 MANY_TO_ONE 또는 morph 관계를 식별해야 합니다. 타임라인 활동 팬아웃과 같은 기능이 중간 객체를 순회할 때 어떤 관련 레코드가 대상인지 Twenty에 알려 줍니다.
표준 객체와의 관계 설정
내장 Twenty 객체(Person, Company 등)와 관계를 만들려면STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS를 사용하세요:
src/fields/person-on-self-hosting-user.field.ts
관계 필드 속성
인라인 관계 필드
defineObject 안에서 관계를 직접 선언할 수도 있습니다. 인라인인 경우에는 objectUniversalIdentifier를 생략하세요 — 상위 객체에서 상속됩니다: