リレーションの仕組み
すべてのリレーションには、互いを参照する2 つのフィールドが必要です:- MANY_TO_ONE 側 — 外部キーを保持するオブジェクト側に存在します。
- 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
src/fields/post-card-on-post-card-recipient.field.ts
循環インポート: 両方のリレーションフィールドは互いの
universalIdentifier を参照します。 循環インポートの問題を避けるため、各ファイルからフィールド ID を名前付き定数としてエクスポートし、相手のファイルでインポートしてください。 ビルドシステムがコンパイル時にこれらを解決します。中間リレーション
中間オブジェクトは、1つのソースレコードを1つ以上のターゲットレコードに接続します。 たとえば、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 を省略します — 親オブジェクトから継承されます: