有一个User
类,它有两种类型的用户,如patient
和doctor
。因此,我创建了另一个属性,用于描述patient
和doctor
之间的关系,医生可以有很多患者。因此,如果用户是专利,他应该有doctorId
,如果不是,则doctorId
为NULL。
这是我的User.orm.yml
:
AcmeBundleDemoBundleEntityUser:
type: entity
table: User
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
name:
type: string
length: 30
lastName:
type: string
length: 30
email:
type: string
length: 60
unique: true
username:
type: string
length: 10
unique: true
password:
type: string
length: 100
unique: false
doctorId:
type: integer
unique: false
nullable: true
dateCreated:
type: datetime
manyToMany:
roles:
targetEntity: Role
mappedBy: users
如何将doctorId
映射为引用id
的外键?
您可以在 Doctrine 文档中找到有关自引用一对多关系的说明:
User:
type: entity
oneToMany:
patients
targetEntity: User
mappedBy: doctor
manyToOne:
doctor:
targetEntity: User
inversedBy: patients
https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-self-referencing
对于学说,您可能想看看关联映射。 http://docs.doctrine-project.org/en/latest/reference/association-mapping.html。在您的情况下,您追求的是一对多的自我引用关系 http://docs.doctrine-project.org/en/latest/reference/association-mapping.html#one-to-many-self-referencing。
一个医生可以有很多病人,但一个病人可以有很多医生吗?如果是这样,则您有一个多对多关系,您可以使用交叉引用表作为连接表来映射该关系。我认为对此进行建模的最佳方法是在您的用户表中有一个 userTypeId,其中值 1 可以是医生,2 可以是病人等。然后一个医生可以有很多病人,但一个病人也可以看很多医生。如果您添加了新的用户类型(如护士等),这也是可扩展的。