Domanda

Attualmente sto progettando un sito Web, usando symfony (1.2) con Doctrine come ORM.

Ho una lezione per la cena, una per i criteri e una per i voti.

  • Un segno è collegato con una cena e un Criteri e ha attributi privati, come DateOfMark, MarkValue, ecc.
  • Cena e criteri possono avere molti Segni (o nessuno).

Mentre uso Doctrine, definisco questo modello nel mio schema.yml, usando il seguente codice:

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

Il problema è che l'SQL generato da Doctrine, aggiunge un STRANIERO CHIAVE ESTERO su Mark.dinner_id a Dinner.id (che è corretto) AND aggiunge un VINCITORE CHIAVE ESTERO su Dinner.id a Mark.dinner_id (che è davvero errato , poiché una cena potrebbe avere molti segni).

Domanda

Mi sono perso qualcosa? Sto sbagliando questo tipo di relazione tra le classi?

Grazie.

È stato utile?

Soluzione

Devi definire la relazione come una relazione uno-a-molti. Prova questo (nota il tipo "quot: many" aggiunto alle definizioni di cena e criteri):

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top