学说2 - 具有附加属性的关联表&遗产

时间:2013-07-05 13:12:57

标签: symfony doctrine-orm associations

我刚开始在我的第一个Symfony2项目中使用Doctrine(目前没有ORM经验)。

我有一个非常简单的结构,但我不满意如何生成类。
我在stackoverflow上寻找教程/相关问题,但到目前为止我还没有找到一个全面的答案:

假设我有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
}

这甚至可能吗?
在这种情况下是否有一些最佳做法?

不确定这是否足够清楚(正如我之前所说,我对此很新),任何帮助都会很高兴地欣赏:)

1 个答案:

答案 0 :(得分:0)

不够清楚:)

你应该建立

User hasMany UserMovies

Movie hasMany UserMovies

关系。这将允许你做这样的事情

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

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) ;
        }
    }
}

或类似的