教义 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:如何在关系表上映射具有附加属性的多对多关系?