2013-07-05 44 views
0

我剛開始在第一個Symfony2項目中使用Doctrine(迄今爲止沒有ORM經驗)。Doctrine 2 - 具有附加屬性和繼承的關聯表

我有一個非常簡單的結構,但我不滿意如何生成類。
我找計算器上的教程/相關的問題,但我還沒有找到一個全面的答案至今:

讓說我有2個實體+的關聯表與附加屬性:

User 
- id: int 
- name: string 
- movies: UserMovie 

Movie 
- id: int 
- name: string 
- duration: int 

UserMovie: 
- user_id: int 
- movie_id: int 
- seen: bool 

用戶可以有幾部電影/一部電影可以由幾個用戶擁有。

我想要的是生成的UserMovie類繼承Movie,所以我可以直接從UserMovie實例訪問電影屬性。

我想獲得這樣的事情作爲生成過程的結果:

class UserMovie extends Movie 
{ 
    protected $user;  // User instance 
    protected $id;  // inherited from Movie 
    protected $name;  // inherited from Movie 
    protected $duration; // inherited from Movie 
} 

這甚至可能嗎?
在這種情況下是否有一些最佳實踐?

不知道這是非常明顯的(正如我剛纔所說,我是很新,這一點),任何幫助,將很樂意讚賞:)

回答

0

這是不夠明確的:)

你應該建立

User hasMany UserMovies

Movie hasMany UserMovies

關係。這將允許你這樣做

class User 
{ 
    public function hasMovie(Movie $movie) 
    { 
     foreach($this->usermovies as $m2m) { 
      if ($m2m->getMovie() === $movie) 
       return true ; 
     } 
     return false ; 
    } 

    public function addMovie(Movie $movie) 
    { 
     if (!$this->hasMovie($movie)) { 
      $m2m = new UserMovie() ; 
      $m2m->setMovie($movie) ; 
      $m2m->setUser($this) ; 
      $this->usermovies->add($m2m) ; 
     } 
    } 
} 

或類似

做這樣的事情

var_dump($user->hasMovie($movie)) ;