簡體   English   中英

Doctrine 和 Symfony2 多個多對多引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM