【问题标题】:Doctrine 2 - Association table with additional properties & inheritance教义 2 - 具有附加属性和继承的关联表
【发布时间】:2013-07-05 13:12:56
【问题描述】:

在我的第一个 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
}

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

不确定这是否足够清楚(正如我之前所说,我对此很陌生),任何帮助将不胜感激:)

【问题讨论】:

    标签: symfony doctrine-orm associations


    【解决方案1】:

    还不够清楚:)

    你应该建立

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

    或类似

    【讨论】:

      猜你喜欢
      • 2012-01-06
      • 1970-01-01
      • 2015-12-21
      • 2023-04-08
      • 2023-03-06
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多