علاقة كثير إلى كثير مع السمات في refClass
-
05-07-2019 - |
سؤال
أقوم حاليًا بتصميم موقع ويب باستخدام Symfony (1.2) مع Doctrine باعتباره ORM.
لدي فصل عشاء وفصل معايير وفصل مارك.
- ترتبط علامة بعشاء ومعايير ، ولها سمات خاصة ، مثل DateOfmark ، Markvalue ، إلخ.
- يمكن أن يكون للعشاء والمعايير العديد من العلامات (أو لا شيء).
عندما أستخدم Doctrine، أقوم بتعريف هذا النموذج في schema.yml الخاص بي، باستخدام الكود التالي:
Dinner:
columns:
date: { type: timestamp, notnull: true }
nb_presents: { type: integer, notnull: true }
relations:
Marks:
class: Criteria
local: dinner_id
foreign: criteria_id
refClass: Mark
Criteria:
columns:
name: { type: string(50), notnull: true }
relation:
Marks:
class: Dinner
local: criteria_id
foreign: dinner_id
refClass: Mark
Mark:
columns:
criteria_id: { type: integer, primary: true }
dinner_id: { type: integer, primary: true }
value: { type: integer, notnull: true }
relations:
Dinner:
local: dinner_id
foreign: id
Criteria:
local: criteria_id
foreign: id
المشكلة هي أن SQL التي تم إنشاؤها بواسطة Doctrine تضيف ملف FOREIGN KEY CONSTRAINT
على Mark.dinner_id
ل Dinner.id
(ايهم صحيح) و يضيف أ FOREIGN KEY CONSTRAINT
على Dinner.id
ل Mark.dinner_id
(وهذا غير صحيح حقًا، حيث قد يحتوي العشاء على العديد من العلامات).
سؤال
هل فاتني شيء؟هل أفعل هذا النوع من العلاقة بين الطبقات بشكل خاطئ؟
يشكركم.
المحلول
تحتاج إلى تعريف العلاقة على أنها علاقة رأس بأطراف.جرب هذا (لاحظ "النوع:العديد" تمت إضافتها إلى تعريفات العشاء والمعايير):
Dinner:
columns:
date: { type: timestamp, notnull: true }
nb_presents: { type: integer, notnull: true }
relations:
Marks:
class: Criteria
local: dinner_id
foreign: criteria_id
refClass: Mark
type: many
Criteria:
columns:
name: { type: string(50), notnull: true }
relation:
Marks:
class: Dinner
local: criteria_id
foreign: dinner_id
refClass: Mark
type: many
Mark:
columns:
criteria_id: { type: integer, primary: true }
dinner_id: { type: integer, primary: true }
value: { type: integer, notnull: true }
relations:
Dinner:
local: dinner_id
foreign: id
Criteria:
local: criteria_id
foreign: id
لا تنتمي إلى StackOverflow