Skip to main content
Отношения связывают два объекта между собой. В Twenty отношения всегда двунаправленные — у каждого отношения есть две стороны, и каждая сторона объявляется как поле, ссылающееся на другую.

Как работают отношения

Каждое отношение требует двух полей, которые ссылаются друг на друга:
  1. Сторона MANY_TO_ONE — находится в объекте, который содержит внешний ключ.
  2. Сторона ONE_TO_MANY — находится в объекте, которому принадлежит коллекция.
Оба поля используют FieldType.RELATION и ссылаются друг на друга через relationTargetFieldMetadataUniversalIdentifier.

Пример: Почтовая открытка имеет много получателей

PostCard может быть отправлен множеству записей PostCardRecipient. Каждый получатель относится ровно к одной открытке. Шаг 1: Определите сторону ONE_TO_MANY на PostCard (сторона “one”):
src/fields/post-card-recipients-on-post-card.field.ts
Шаг 2: Определите сторону MANY_TO_ONE на PostCardRecipient (сторона “many” — содержит внешний ключ):
src/fields/post-card-on-post-card-recipient.field.ts
Циклические импорты: оба поля отношений ссылаются на universalIdentifier друг друга. Чтобы избежать проблем с циклическими импортами, экспортируйте идентификаторы полей как именованные константы из каждого файла и импортируйте их в другом. Система сборки разрешает это на этапе компиляции.

Связывание со стандартными объектами

Чтобы создать отношение со встроенным объектом Twenty (Person, Company и т. д.), используйте STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS:
src/fields/person-on-self-hosting-user.field.ts

Свойства поля отношения

Встроенные поля связей

Вы также можете объявить связь напрямую внутри defineObject. При встроенном объявлении опустите objectUniversalIdentifier — он наследуется от родительского объекта: