使用Doctrine ORM 2.4我想实现一些看起来像这个例子的东西:
Person {
private $name;
private $email;
}
Student extends Person {
private $favoriteTeacher;
}
Teacher extends Person {
private $subjectsTaught;
}
但是,我希望一个人能够同时成为一名学生和一名教师,就像一个自然人在某种情况下是学生而在另一种情况下是一名教师。
在数据库级别上,这意味着我们只有系统中的人员数据ONCE,并且当该人的电子邮件更改时不必更改电子邮件两次。
数据库级别的表示可能是这样的:
person:
- id (primary key)
- name
- email
student:
- person_id (primary & foreign key)
- favoriteTeacher
teacher:
- person_id (primary & foreign key)
- subjectsTaught
因此,以下示例数据将完全合理:
person: id=1, name=peter, ...
student: person_id=1, ...
teacher: person_id=1, ...
是否有一个Doctrine结构可以做到这一点?据我所知,当你有一个老师和一个学生时,所有提出的替代方案here in the doctrine docs都会为Person创建两个条目。