ما هي أفضل طريقة لإنشاء علاقة tableA HABTM tableA لتطبيق CakePHP؟

StackOverflow https://stackoverflow.com/questions/226805

  •  03-07-2019
  •  | 
  •  

سؤال

أحتاج إلى إنشاء وظيفة للسماح للمستخدمين المسجلين بربط أنفسهم باستخدامات أخرى وتكوين عائلة.تبدو جداول قاعدة البيانات الخاصة بي كما يلي:

db.persons - (بوب، جين، تيمي، الخ)

  • بطاقة تعريف
  • اسم
  • بريد إلكتروني

db.persons_persons

  • بطاقة تعريف
  • person__id_parent
  • person_id_child
  • Relationtype_id

db.relationtypes - (الزوج، الطفل، ابن الأخ، الخ)

  • بطاقة تعريف
  • اسم

باستخدام هذه البنية، يجب أن أكون قادرًا على تحديد أن بوب هو زوج جين في جدول الأشخاص_الأشخاص.سيبدو السجل في db.persons_persons كما يلي (psuedo):

ID | person_parent | person_child | relationtype
1  | Bob           | Jane         | Spouse
2  | Bob           | Timmy        | Child

أدرك أن هذا قد يتسبب في بعض تجزئة البيانات لأنه إذا كان بوب وجين متزوجين، فيجب أن يرتبط طفل أحدهما بالآخر.لكن هذا ليس سؤالي.سؤالي هو ما إذا كان إعداد قاعدة البيانات هذا "الأكثر صحة" للاستخدام في تطبيق cakePHP أم لا.

هل كانت مفيدة؟

المحلول

أولاً، سوف يقوم CakePHP تلقائيًا بتبديل a people الجدول في أ people وحدة تحكم و person نموذج، لذلك لا تحتاج إلى تسميته persons.ثم سأتصل بجدول البحث relationships بدلا من persons_persons.

سأستدعي الحقول في جدول العلاقات الخاص بك person_id, relation_id و relation_type_id, ، ثم قم بإضافة الشرطة السفلية في الخاص بك relationtypes اسم الجدول حتى يصبح relation_types.

أعتقد أن هذا أكثر دلالة.

لا يزال بإمكانك استخدام اقتران hasAndBelongsToMany والاستفادة من السحر التلقائي "مع"الارتباطات التي تقدمها CakePHP (1.2 فقط) للوصول إلى البيانات الإضافية في جدول HABTM لنوع العلاقة.

ومع ذلك، سأميل إلى استخدام:

  • Person hasMany Relation
  • Relation ينتمي إلى Person, Relation, RelationType

في تطبيقك، هل العلاقة بين الأشخاص متضمنة ضمنيًا في علاقة شخص آخر بهم؟أي.إذا وجدت Person.id = 1 فقد تحصل على جميع علاقاتهم، على سبيل المثال.معرف الشخص 2 و3 و4.ولكن إذا وجدت Person.id 2، فلن تحصل تلقائيًا على Person.id = 1، ما لم يكن هناك سجل آخر في جدول العلاقات يمثل تلك العلاقة.

لتحقيق ذلك، يمكنك إعداد جمعية أخرى:

  • Person hasMany Relation1 مع المفتاح الأجنبي person_id
  • Person hasMany Relation2 مع المفتاح الأجنبي relation_id
  • Relation ينتمي إلى Person, Relation, RelationType

لاحظ أنه يمكنك تحقيق هذه العلاقة المزدوجة مع HABTM أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top