Вопрос

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

Вопрос

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

Спасибо вам.

Это было полезно?

Решение

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

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