如何使用自引用关系在教义ORM中将表映射到自身



有一个User类,它有两种类型的用户,如patientdoctor。因此,我创建了另一个属性,用于描述patientdoctor之间的关系,医生可以有很多患者。因此,如果用户是专利,他应该有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 可以是病人等。然后一个医生可以有很多病人,但一个病人也可以看很多医生。如果您添加了新的用户类型(如护士等),这也是可扩展的。

相关内容

  • 没有找到相关文章