2012-04-05 2 views
0

여기 내 문제가 있습니다. 내 묶음에 몇 가지 entites가 있습니다. 영화를 관리하기 위해 번들을 만들려고합니다. 그러나 여러 경우에 액터는 이사가 될 수도 있고 그 반대 일 수도 있습니다. 그래서 저는 그것들을 "연예인"으로 지명했습니다. 그리고 각 영화, 영화 실재물에서 저는 감독으로 두 명의 예술가를, 배우로 영화 배우와 작가로 부부를 지명하고 싶습니다. 그러나 ManyToMany 관계로 아티스트 엔티티를 여러 번 참조 할 수 없습니다. 다음은 내가하려는 일입니다.Doctrine과 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; 

} 

는 업데이트 :

영화 :

class Movie 
{ 

    protected $id; 

    protected $name; 

} 

아티스트 :

class Artist 
{ 

    protected $id; 

    protected $name; 

} 

작가 엔티티 및이 방법에 따라서

, 당신의 entites은 다음과 같이된다 영화 엔티티가 서로에 대해 아는 것이 없으면 MovieRole 엔티티가 두 개를 조인합니다.

영화에 감독을 추가하면 관련된 영화 엔티티, 아티스트 엔티티 및 '감독'을 역할로하여 MovieRole 엔티티를 유지합니다. 아티스트에게 다른 역할을 부여하려면 동일한 영화 및 아티스트가있는 다른 MovieRole 엔티티를 유지하고 역할을 작성하십시오. 또는 다른 감독을 추가하려면 동일한 영화, 새 감독 및 '감독'역할을 가진 다른 MovieRole 엔티티를 유지하십시오.

영화 감독을 찾으려면 MovieRole 엔터티에 movie와 role을 매개 변수로 쿼리하십시오. 또는 아티스트의 모든 역할을 찾으려면 아티스트를 매개 변수로 사용하여 MovieRole 엔티티를 쿼리하십시오.

+0

왜 many-to-one입니까? 배우가 영화에서 여러 역할을 수행하는 경우 (즉, 감독자와 연기자가 동시에 역할을 수행하는 경우) 나는 몇몇 배우가 이것을했다고 믿는다. 그 다음 manytomany 일 텐데? ??? – user1158667

+0

이것은 영화 엔티티가 아닙니다. 이것은 many-to-many를 사용할 때 하나의 교리가 생성하는 것처럼 두 엔티티를 결합하는 데 사용되는 엔티티입니다. 이 방법을 사용하면 동영상 엔티티, 역할 엔티티 및이 엔티티를 결합 할 수 있습니다. 아티스트를 무비에 추가하려면 해당 무비, 아티스트 및 역할을 추가하는이 엔티티 (MovieRole)를 유지해야합니다. 영화 엔티티 및 역할 엔티티는 서로를 인식하지 못하지만이 테이블 만 서로 연결됩니다. 이렇게하면 원하는만큼 동일한 영화에 아티스트를 추가 할 수 있습니다. –

+0

그런데 왜 그렇게 많은가? 어떤 아티스트도 역할을 가질 수 있기 때문에 하나의 아티스트 만이 역할을 수행합니까? 나는 이것을 정확하게 얻고 있는가? – user1158667