Отношение многие-ко-многим с атрибутами в refClass

В настоящее время я разрабатываю веб-сайт, используя symfony (1.2) с Doctrine в качестве ORM.

У меня есть класс Dinner, класс Criteria и класс Mark.

  • Отметка связана с Обедом и Критериями и имеет частные атрибуты, такие как 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 (что действительно неверно, поскольку на обеде может быть много Метки).

Вопрос

Я что-то пропустил ? Я неправильно использую такие отношения между классами?

Спасибо вам.


person Clement Herreman    schedule 21.10.2009    source источник


Ответы (1)


Вам необходимо определить отношение как отношение «один ко многим». Попробуйте это (обратите внимание на «type: many», добавленное в определения Dinner и Criteria):

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
person Jeremy Kauffman    schedule 22.10.2009