教义 2 - 具有附加属性和继承的关联表

Posted

技术标签:

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

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

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

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

还不够清楚:)

你应该建立

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

或类似

【讨论】:

以上是关于教义 2 - 具有附加属性和继承的关联表的主要内容,如果未能解决你的问题,请参考以下文章

Fluent NHibernate:如何在关系表上映射具有附加属性的多对多关系?

5.9 作为关联数组的对象

反对 js:无法使用连接表额外属性更新多对多关系。说附加属性无效

运行访问报告,包括另一个具有相同日期范围的非关联附加报告

创建具有附加属性和时刻的工作日数组

2021-09-13 WPF上位机 09-依赖属性,属性转换,属性继承,依赖附加属性