[Doctrine]Relations worden niet goed meegenomen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • !GN!T!ON
  • Registratie: September 2006
  • Laatst online: 06-09 18:39
Ik probeer een projectje te maken in Symfony met als ORM Doctrine.

Ik heb een bestaande MySQL 5.1.41 database en heb via de symfony commandline doctrine een schema laten genereren in YAML.

So far so good, ik kan daarna de DB goed aanmaken en de relations staan er ook bijna goed in.
Ik zeg bijna want de constraints worden niet goed overgenomen, alles staat op RESTRICT terwijl ik bijvoorbeeld CASCADE zou zien.

voorbeeld YAML:

YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Locatie:
  connection: doctrine
  tableName: locatie
  columns:
    loc_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    org_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    naam:
      type: string(30)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
  relations:
    Organisatie:
      local: org_id
      foreign: org_id
      type: one
      onDelete: CASCADE
      onUpdate: CASCADE

Organisatie:
  connection: doctrine
  tableName: organisatie
  columns:
    org_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    naam:
      type: string(30)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
  relations:
    Locatie:
      local: org_id
      foreign: org_id
      type: many


Volgens de documentatie van Doctrine moet de constraint geplaats worden aan de kant waar de foreignkey excists (volgens mij in dit geval de tabel Locatie) maar ik heb beide geprobeerd en ze werken allebei niet. De relatie wordt gelegt, maar niet volgens CASCADE, als ik bijvoorbeeld een locatie koppel aan een organisatie en deze wil deleten kan ik dat niet doen tot de locatie eerst is verwijderd.

Wat gaat hier mis?

Acties:
  • 0 Henk 'm!

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

Nu ben ik niet bekend met Doctrine, maar wat ik als buitenstaander zie is dat er geen 'onDelete' moet worden gebruikt, maar een variant daarop:

code:
1
cascade: [delete]


In de links hieronder zal ook te zien zijn dat save() op applicatie niveau wordt afgehandeld. Ik zie niet in de topicstart terug of dit nu wel of niet werkt, maar de reden daarvoor zal zijn dat het automatisch gebeurd (en niet door de onUpdate)

Zie:
- http://www.doctrine-proje...-cascades:delete-cascades
- http://www.doctrine-proje...pplication-level-cascades

Ik hoop dat je er wat mee kunt.

Acties:
  • 0 Henk 'm!

  • !GN!T!ON
  • Registratie: September 2006
  • Laatst online: 06-09 18:39
Dat had ik inderdaad gelezen, helaas gebeurde dit niet automatisch, daarom probeerde ik het ook op de DB laag. de notatie die jij geeft is overigens als je het schema in PHP schrijft, de YAML notatie is wel correct.

Ik heb het probleem inmiddels ook op kunnen lossen. Ik was van menig dat de SQL via de YAML file word gebouwd. maar dit blijkt via de modules te worden gedaan, en deze refreshde ik niet. Hierdoor werden wijzegingen niet doorgegeven aan de DB en hadden mijn aanpassingen dus geen effect ;)