这是我的问题。我的捆绑中有几个诱惑。我正在尝试制作一个管理电影的套装。但是,在某些情况下,演员也可以是导演,反之亦然。所以我把它们命名为“艺术家”。然后,在每部电影中,在电影实体中,我想指派几个“艺术家”作为导演,一对夫妇作为演员,一对作为剧本/作家。但是,我无法使用ManyToMany关系多次引用Artist实体。这就是我想要做的事情:
/**
* @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;
我该如何避免这个问题?
答案 0 :(得分:1)
您可以使用其他类来表示电影中人物的角色。
class MovieRole
{
// many-to-one with Movie
protected $movie;
// many-to-one with Artist
protected $artist;
// string, role of the artist
protected $role;
}
更新
所以通过这种方式,你的成员会变成这样:
电影:
class Movie
{
protected $id;
protected $name;
}
艺术家:
class Artist
{
protected $id;
protected $name;
}
艺术家实体和电影实体对彼此一无所知,MovieRole
实体加入其中两个。
当你将导演添加到电影中时,你会持有一个MovieRole
实体,以及相关的电影实体,艺术家实体和导演'作为一个角色。如果您想为艺术家提供另一个角色,请使用相同的电影和艺术家保留另一个MovieRole
实体,并撰写该角色。或者,如果您想要添加其他导演,请使用同一部电影,新导演和导演'持久保留另一个MovieRole
实体。作为一个角色。
如果要查找电影的导演,请查询具有电影和角色作为参数的MovieRole
实体。或者,如果您想查找艺术家的所有角色,请查询MovieRole
实体,并以艺术家作为参数。