[英]Doctrine and Symfony2 multiple manytomany references
這是我的問題。 我的捆綁包中有幾個實體。 我正在嘗試制作一個捆綁包來管理電影。 但是,在某些情況下,Actor 也可以是 Director,反之亦然。 所以我將他們命名為“藝術家”。 然后,在每部電影中,在電影實體中,我想指定幾個“藝術家”作為導演,一對夫婦作為演員,一對夫婦作為劇本/作家。 但是,我無法通過 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;
我怎樣才能避免這個問題?
您可以使用另一個 class 來表示電影中人物的角色。
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
實體,以藝術家為參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.