سؤال

أقوم حاليًا بتصميم موقع ويب باستخدام 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top