Отношение «многие ко многим» с атрибутами в 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
(что на самом деле неверно, поскольку за ужин может быть много оценок).
Вопрос
Я что-то пропустил ?Я неправильно устанавливаю такие отношения между классами?
Спасибо вам.
Решение
Вам необходимо определить отношение как отношение «один ко многим».Попробуйте это (обратите внимание на «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