2012-04-05 106 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