0

これが私の問題です。バンドルにいくつかのエンティティがあります。映画を管理するためのバンドルを作成しようとしています。ただし、場合によっては、アクターがディレクターになることも、その逆も可能です。だから私は彼らを「アーティスト」と名付けました。そして、各映画で、映画エンティティで、2人の「アーティスト」を監督、2人を俳優、2人を脚本/作家として割り当てたいと思います。ただし、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;

この問題を回避するにはどうすればよいですか?

4

1 に答える 1

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。エンティティは2つを結合します。

映画に監督を追加するMovieRoleと、関連する映画エンティティ、アーティストエンティティ、および「監督」を役割として持つエンティティが永続化されます。アーティストに別の役割を与えたい場合はMovieRole、同じ映画とアーティストで別のエンティティを永続化し、その役割を記述します。MovieRoleまたは、別の監督を追加する場合は、同じ映画、新しい監督、および「監督」を役割として持つ別のエンティティを永続化します。

映画の監督を検索する場合は、MovieRole映画と役割をパラメーターとしてエンティティにクエリを実行します。または、アーティストのすべての役割を検索する場合は、MovieRoleartistをパラメーターとしてエンティティにクエリを実行します。

于 2012-04-05T21:08:09.420 に答える