Doctrine和Symfony2多个很多参考文献

时间:2012-04-05 20:43:56

标签: php orm symfony doctrine

这是我的问题。我的捆绑中有几个诱惑。我正在尝试制作一个管理电影的套装。但是,在某些情况下,演员也可以是导演,反之亦然。所以我把它们命名为“艺术家”。然后,在每部电影中,在电影实体中,我想指派几个“艺术家”作为导演,一对夫妇作为演员,一对作为剧本/作家。但是,我无法使用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;

我该如何避免这个问题?

1 个答案:

答案 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实体,并以艺术家作为参数。