我有一个MySQL 5.1.41数据库,我正在尝试填充学说,但是学说没有正确地插入关系。我的YAML是:
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
straat:
type: string(30)
fixed: false
unsigned: false
primary: false
notnull: true
autoincrement: false
huisnummer:
type: integer(4)
fixed: false
unsigned: false
primary: false
notnull: true
autoincrement: false
huisnummer_achtervoegsel:
type: string(3)
fixed: false
unsigned: false
primary: false
notnull: false
autoincrement: false
plaats:
type: string(25)
fixed: false
unsigned: false
primary: false
notnull: true
autoincrement: false
postcode:
type: string(6)
fixed: false
unsigned: false
primary: false
notnull: true
autoincrement: false
telefoon:
type: string(12)
fixed: false
unsigned: false
primary: false
notnull: true
autoincrement: false
opmerking:
type: string()
fixed: false
unsigned: false
primary: false
notnull: false
autoincrement: false
inloggegevens:
type: string()
fixed: false
unsigned: false
primary: false
notnull: false
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
straat:
type: string(30)
fixed: false
unsigned: false
primary: false
notnull: true
autoincrement: false
huisnummer:
type: integer(4)
fixed: false
unsigned: false
primary: false
notnull: true
autoincrement: false
huisnummer_achtervoegsel:
type: string(3)
fixed: false
unsigned: false
primary: false
notnull: false
autoincrement: false
plaats:
type: string(25)
fixed: false
unsigned: false
primary: false
notnull: true
autoincrement: false
postcode:
type: string(6)
fixed: false
unsigned: false
primary: false
notnull: true
autoincrement: false
telefoon:
type: string(12)
fixed: false
unsigned: false
primary: false
notnull: true
autoincrement: false
opmerking:
type: string(255)
fixed: false
unsigned: false
primary: false
notnull: false
autoincrement: false
relations:
Locatie:
local: org_id
foreign: org_id
type: many
现在,如果创建一个组织,然后创建一个具有组织外键的位置,一切都很好。但是当我尝试用phpmyadmin更新org_id时,我得到了一个约束错误。如果我手动将外键设置为ON_UPDATE CASCADE,它确实有效。
为什么学说不设置此选项?
我让它在Propel中工作,但我真的想为此使用学说。
答案 0 :(得分:0)
好吧,你无法更新org_id,因为它是由位置表引用的。如果您更改它,则意味着组织有一个不存在的位置---外键失败。首先插入您的位置数据,然后所有位置值都成为组织的可能值,或者如您所述使用onCascade操作。
此外,您可以做的是首先定义Organisatie表,并仅包含此表的关系声明(一个定义对于Doctrine来说已经足够了)。现在引用了Locatie表,您可以自由地使用它的键。当然,您仍然无法从Organisatie表中引用不存在的内容。
我还发现你的架构目前说“一个组织有很多位置”,虽然我猜你有意“一个地方有很多组织”。如果确实如此,请将Organisatie-> relations-> Locatie更改为“type:one,foreignType:many”,并从Locatie表中删除关系声明。
希望有所帮助。