メインコンテンツへスキップ
リレーションは 2 つのオブジェクト同士を関連付けます。 Twenty におけるリレーションは常に 双方向 です — すべてのリレーションには 2 つの側面があり、それぞれが相手を参照するフィールドとして宣言されます。

リレーションの仕組み

すべてのリレーションには、互いを参照する2 つのフィールドが必要です:
  1. MANY_TO_ONE 側 — 外部キーを保持するオブジェクト側に存在します。
  2. ONE_TO_MANY 側 — コレクションを所有するオブジェクト側に存在します。
両方のフィールドは FieldType.RELATION を使用し、relationTargetFieldMetadataUniversalIdentifier を介して相互参照します。

例: PostCard は多数の Recipient を持つ

PostCard は多数の PostCardRecipient レコードに送信できます。 各受取人は厳密に 1 件の PostCard に属します。 ステップ 1: PostCard に ONE_TO_MANY 側を定義(「1」の側):
src/fields/post-card-recipients-on-post-card.field.ts
ステップ 2: PostCardRecipient に MANY_TO_ONE 側を定義(「多」の側 — 外部キーを保持):
src/fields/post-card-on-post-card-recipient.field.ts
循環インポート: 両方のリレーションフィールドは互いの universalIdentifier を参照します。 循環インポートの問題を避けるため、各ファイルからフィールド ID を名前付き定数としてエクスポートし、相手のファイルでインポートしてください。 ビルドシステムがコンパイル時にこれらを解決します。

標準オブジェクトとのリレーション

組み込みの Twenty オブジェクト(Person、Company など)とリレーションを作成するには、STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS を使用します:
src/fields/person-on-self-hosting-user.field.ts

リレーションフィールドのプロパティ

インラインのリレーションフィールド

defineObject の中で、リレーションを直接宣言することもできます。 インラインで宣言する場合は、objectUniversalIdentifier を省略します — 親オブジェクトから継承されます: