Skip to main content
تربط العلاقات كائنين معًا. في Twenty، تكون العلاقات دائمًا ثنائية الاتجاه — لكل علاقة جانبَان، ويُصرَّح عن كل جانب كحقل يُشير إلى الآخر.

كيف تعمل العلاقات

تتطلّب كل علاقة حقلين يشيران إلى بعضهما البعض:
  1. جانب MANY_TO_ONE — يوجد على الكائن الذي يحمل المفتاح الخارجي.
  2. جانب ONE_TO_MANY — يوجد على الكائن الذي يملك المجموعة.
يستخدم كلا الحقلين FieldType.RELATION ويُحيل كلٌ منهما إلى الآخر عبر relationTargetFieldMetadataUniversalIdentifier.

مثال: البطاقة البريدية لديها العديد من المستلمين

يمكن إرسال PostCard إلى العديد من سجلات PostCardRecipient. ينتمي كل مستلم إلى بطاقة بريدية واحدة بالضبط. الخطوة 1: عرّف جانب ONE_TO_MANY على PostCard (جانب “الواحد”):
src/fields/post-card-recipients-on-post-card.field.ts
الخطوة 2: عرّف جانب MANY_TO_ONE على PostCardRecipient (جانب “العديد” — يحمل المفتاح الخارجي):
src/fields/post-card-on-post-card-recipient.field.ts
الاستيرادات الدائرية: كلا حقلي العلاقة يُشير كلٌّ منهما إلى universalIdentifier الخاص بالآخر. لتجنّب مشكلات الاستيراد الدائري، صدِّر معرّفات الحقول كثوابت مسمّاة من كل ملف، واستورِدها في الملف الآخر. يقوم نظام البناء بحلّها في وقت التجميع.

علاقات الربط

يربط كائن الربط سجل مصدر واحدًا بسجل هدف واحد أو أكثر. على سبيل المثال، يمكن أن يحتوي PostCardRecipient على كلٍّ من علاقة postCard وعلاقة recipient. في حقل ONE_TO_MANY الخاص بالكائن المصدر، عيّن junctionTargetFieldUniversalIdentifier إلى حقل العلاقة في كائن الربط الذي يشير إلى الهدف:
يجب أن يحدد RECIPIENT_FIELD_ID علاقة MANY_TO_ONE أو علاقة morph في كائن الربط. يخبر Twenty بالسجل المرتبط الذي يمثل الهدف عندما تعبر ميزة مثل توزيع نشاط المخطط الزمني كائن الربط.

الربط مع الكائنات القياسية

لإنشاء علاقة مع كائن Twenty مضمّن (Person, Company, etc.)، استخدم STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS:
src/fields/person-on-self-hosting-user.field.ts

خصائص حقل العلاقة

حقول العلاقات المضمَّنة

يمكنك أيضًا إعلان علاقة مباشرة داخل defineObject. عند كونها مضمَّنة، احذِف objectUniversalIdentifier — إذ يُورَّث من الكائن الأب: