Symfony2多对多关系Db结构

时间:2015-04-17 06:48:20

标签: mysql database symfony orm doctrine-orm

我正在使用Symfony2构建一个用于管理电影数据库的应用。 我有电影桌和艺术家表。

现在在电影中可能有很多不同角色的艺术家,我的问题就出现了,因为我不太擅长关系映射我面临的问题。

对于电影X艺术家A是演员,对于电影Y艺术家B是演员和导演。

现在我的问题如何构建连接表以便我可以保存检索艺术家相关的工作,如:电影名称,角色(可能是一部电影的多个角色)

到目前为止,我的ORM是:电影

table: content
id:
    id:
        type: integer
        generator: { strategy: AUTO }
fields:
    title:
        type: string
        length: 120
        unique: true
manyToMany:
    actor:
          targetEntity: Artist
          joinTable:
              name: content_actor
              joinColumns:
                   content_id:
                        referencedColumnName: id
              inverseJoinColumns:
                   artist_id:
                        referencedColumnName: id

艺术家的ORM:

 id:
        id:
        type: integer
        generator: { strategy: AUTO }
fields:
    name:
        type: string
        length: 255
        unique: true

但这创造了一个问题,导演我为歌手,摄影师,女演员等创建了另一个表,那么如何才能有一个表格,我可以存储所有信息并规范化数据?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

好吧,我写另一种方式:

使用可以使用此映射:

电影:

Movie:
    type: entity
    table: movie
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        title: ~
        createdAt:
            type: datetime
    oneToMany:
        roles:
            targetEntity: Role
            mappedBy: movie

艺术家:

Artist:
    type: entity
    table: artist
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        fname: ~
        lname: ~
        birthDate:
            type: datetime
        #other fields for this entity

作用:

Role:
    type: entity
    table: role
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        name: ~

    manyToMany:
        artist:
            targetEntity: Artist

    manyToOne:
        movie:
            targetEntity: Movie
            inversedBy: roles