2012-04-05 58 views
0

这是我的问题。我的包中有几个实体。我试图制作一个管理电影的软件包。但是,在一些情况下,演员也可以是导演,反之亦然。所以我把它们命名为“艺术家”。然后,在每部电影中,在电影实体中,我想分配几个“艺术家”作为导演,一对夫妇作为演员,一对夫妇作为剧本/作家。但是,我无法多次使用ManyToMany关系引用Artist实体。这是我想要做的:学说和Symfony2多个manytomany参考

/** 
* @ORM\Entity 
* @ORM\Table(name="movies") 
*/ 
class Movie 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=100) 
    */ 
    protected $title; 

    /** 
    * @ORM\Column(type="string", length=100) 
    */ 
    protected $image; 

    /** 
    * @ORM\ManyToOne(targetEntity="Artist", inversedBy="movies") 
    * @ORM\JoinColumn(name="category_id", referencedColumnName="id") 
    */ 
    protected $actors; 

    /** 
    * @ORM\ManyToOne(targetEntity="Artist", inversedBy="movies") 
    * @ORM\JoinColumn(name="category_id", referencedColumnName="id") 
    */ 
    protected $directors; 

    /** 
    * @ORM\ManyToOne(targetEntity="Artist", inversedBy="movies") 
    * @ORM\JoinColumn(name="category_id", referencedColumnName="id") 
    */ 
    protected $writers; 

我该如何避免这个问题?

回答

1

您可以使用另一个类来表示电影中人物的角色。

class MovieRole 
{ 

    // many-to-one with Movie 
    protected $movie; 

    // many-to-one with Artist 
    protected $artist; 

    // string, role of the artist 
    protected $role; 

} 

更新:

所以用这种方式,你的entites变成这样:

电影:

class Movie 
{ 

    protected $id; 

    protected $name; 

} 

艺术家:

class Artist 
{ 

    protected $id; 

    protected $name; 

} 

艺术家实体,电影实体不会彼此不了解任何事情,MovieRole实体加入其中两个。

当您将导演添加到电影中时,您会坚持使用相关电影实体,艺术家实体和“导演”作为角色的MovieRole实体。如果您想赋予艺术家另一个角色,请坚持使用同一部电影和艺术家的另一个MovieRole实体,并编写角色。或者,如果您想要添加其他导演,请坚持使用同一部电影的另一个MovieRole实体,新导演和“导演”作为角色。

当您想要查找电影的导演时,请查询以电影和角色为参数的MovieRole实体。或者,如果您想查找艺术家的所有角色,请使用artist作为参数查询MovieRole实体。

+0

为什么多对一?如果演员在电影中扮演多个角色(即指挥并同时在其中扮演角色),该怎么办?我相信一些演员已经做到了。那将是一个很多的东西呢? – user1158667 2012-04-08 17:44:32

+0

这不是电影实体。这是用于连接两个实体的实体,如使用多对多时生成的一个教条。通过这种方式,你有一个电影实体,一个角色实体和这个实体来加入它们。当你想添加一个艺术家到电影中时,你坚持这个实体(MovieRole)添加相关的电影,艺术家和角色。电影实体和角色实体彼此不知道,只有这个表使它们之间的连接成为可能。这样,您可以尽可能多地将艺术家添加到同一部电影中。 – 2012-04-08 18:25:25

+0

为什么多对一呢?因为任何艺术家都可以扮演一个角色,但角色只能由一位艺术家举办?我正确地得到这个吗? – user1158667 2012-04-08 18:33:37