Many-to-many-Beziehung mit Attributen in refClass
-
05-07-2019 - |
Frage
Ich bin derzeit der Gestaltung einer Website, mit symfony (1.2) mit Lehre als ORM.
Ich habe ein Abendessen Klasse, eine Criteria-Klasse und eine Mark-Klasse.
- A Mark ist mit einem Abendessen und einem verknüpftes Kriterien, und verfügt über eine eigenes Attribut, wie DateOfMark, MarkValue, usw.
- Dinner und Kriterien können viele haben Marks (oder keine).
Wie ich Lehre verwenden, definiere ich dieses Modell in meinem schema.yml, mit dem folgenden Code:
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
Das Problem ist, dass die SQL durch Lehre erzeugt, hat es eine FOREIGN KEY CONSTRAINT
auf Mark.dinner_id
fügt Dinner.id
(was richtig ist) und es fügt eine FOREIGN KEY CONSTRAINT
auf Dinner.id
Mark.dinner_id
(was wirklich falsch ist, als ein Abendessen könnten viele Marks haben).
Frage
Habe ich etwas verpasst? Bin ich diese Art von Beziehung zwischen den Klassen falsch machen?
Danke dir.
Lösung
Sie müssen die Beziehung definieren, wie eine Eins-zu-viele-Beziehung zu sein. Versuchen Sie, diese (beachten Sie den „Typ: viele“ hinzugefügt, um die Abendessen und Kriterien Definitionen):
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