2012-03-01 47 views
3

许多关系我有3个实体:多许多在Symfony2的

  • 艺术家
  • 类型

一首歌曲可以有多个流派,反之亦然。一首歌也可以有多个艺术家,反之亦然。

这就是为什么我试图创建两个多对多的关系。然而,在生成实体clases时,首先两个总是被第二个“覆盖”和没有变量或访问器为一个创建..

这里是我的YAML:(更新)

Foo\BarBundle\Entity\Song: 
    type: entity 
    table: song 
    id: 
    id: 
     type: integer 
     generator: 
     strategy: AUTO 
    fields: 
    title: 
     type: string 
     length: 300 
    mime_type: 
     type: string 
     length: 20 
    filesize: 
     type: integer 
     length: 20 
    length: 
     type: string 
     length: 20 
    created_at: 
     type: datetime 
     gedmo: 
     timestampable: 
      on: create 
    manyToOne: 
    user: 
     targetEntity: Spotaset\UserBundle\Entity\User 
     inversedBy: songs 
    manyToMany: 
    genres: 
     targetEntity: Genre 
     inversedBy: songs 
    manyToMany: 
    artists: 
     targetEntity: Artist 
     inversedBy: songs 


Foo\BarBundle\Entity\Artist: 
    type: entity 
    table: artist 
    id: 
    id: 
     type: integer 
     generator: 
     strategy: AUTO 
    fields: 
    name: 
     type: string 
     length: 100 
     unique: true 
    manyToMany: 
    songs: 
     targetEntity: Song 
     mappedBy: artistss 

Foo\BarBundle\Entity\Genre: 
    type: entity 
    table: genre 
    id: 
    id: 
     type: integer 
     generator: 
     strategy: AUTO 
    fields: 
    name: 
     type: string 
     length: 100 
     unique: true 
    manyToMany: 
    songs: 
     targetEntity: Song 
     mappedBy: genres 

我不知道了很多关于关系数据库,所以我不知道阉这是一个bug或者是,这种设计一般只坏..

所有帮助是非常感谢!

+4

我一直发现,与自动创建的连接表的MasnyToMany关系是我的口味太多神奇。我明确地创建了连接实体,然后使用简单的OneToMany/ManyToOne关系。 – Cerad 2012-03-02 01:13:37

回答

9

终于解决了这个(愚蠢的)问题。原来我不得不同时定义多对多下一个多对多的标题是这样的:

manyToMany: 
    genres: 
     targetEntity: Genre 
     inversedBy: songs 
    artists: 
     targetEntity: Artist 
     inversedBy: songs 
+4

这是因为yaml不处理公共密钥并简单地覆盖它们。这在继承configs时非常好(请参阅config.yml和config_prod.yml作为示例)。 – Sgoettschkes 2012-03-05 12:50:59