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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top