我目前正在设计一个网站,使用symfony(1.2)和Doctrine作为ORM。
我有一个晚餐课,一个Criteria课和一个Mark课。
当我使用Doctrine时,我使用以下代码在schema.yml中定义了这个模型:
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
问题是由Doctrine生成的SQL,它在FOREIGN KEY CONSTRAINT
上向Mark.dinner_id
添加Dinner.id
(这是正确的) AND 它添加了{{ 1}}在FOREIGN KEY CONSTRAINT
到Dinner.id
(这真的不对,因为晚餐可能有很多标记)。
我错过了什么吗?我在课间做这种关系错了吗?
谢谢你。
答案 0 :(得分:3)
您需要将关系定义为一对多关系。试试这个(请注意“晚餐和标准”定义中添加的“类型:多个”):
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