symfony 如何在Doctrine ORM中使用自引用关系将表Map到其自身,

qcbq4gxm  于 2023-06-06  发布在  其他
关注(0)|答案(2)|浏览(165)

有一个User类,它有两种类型的用户,如patientdoctor。因此,我创建了另一个属性,用于描述patientdoctor之间的关系,医生可以有许多患者。所以,如果用户是专利,他应该有doctorId,如果不是,doctorId是NULL。
以下是我的User.orm.yml

Acme\Bundle\DemoBundle\Entity\User:
    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

如何将doctorIdMap为引用id的外键?

ttisahbt

ttisahbt1#

您可以在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

s8vozzvw

s8vozzvw2#

关于教条,你可能想看看关联Map。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。
一个医生可以有很多病人,一个病人可以有很多医生吗?如果是这样的话,你就有一个多对多的关系,你可以使用交叉引用表作为连接表来Map出来。我觉得最好的建模方法是在你的用户表中设置一个userTypeId,其中值1可以是医生,2可以是病人等。一个医生可以有很多病人,一个病人也可以看很多医生。如果您添加了新的用户类型,如护士等,这也是可扩展的。

相关问题