【发布时间】:2017-12-05 09:12:47
【问题描述】:
我需要在 Symfony 实体中创建这个数据库方案:
A 类:
- 身份证
- 姓名
- ...其他一些属性仅适用于 A 类
B 类:
- 身份证
- 姓名
- ...其他一些属性仅适用于 B 类
C类:
- 身份证
- 姓名
- ...其他一些属性仅适用于 C 类
课程:
- 身份证
- 姓名
- 类型
- class_id
- class_type [A, B, C]
- ...
我需要在课程实体(使用 class_id)与其他实体(ClassA、ClassB、ClassC)(使用 id)和使用 class_type(A、B、C)之间创建关系。
课程不是课程,课程也不是课程。这里没有继承。在我的项目中,我使用了这个概念(id 和 type 来映射不同的实体)。所以我需要用一个像这样的简单例子来解决这个问题
我想过在这里使用@ORM\DiscriminationMap:
/**
* Course
*
* @ORM\Table(name="Course")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="course_type", type="string")
* @ORM\DiscriminatorMap({"A" = "ClassA", "B" = "ClassB", "C" = "ClassC"})
*/
abstract class Course
{
//...
}
class ClassA extends Course
{
//...
}
class ClassB extends Course
{
//...
}
class ClassC extends Course
{
//...
}
或者类似的东西。
但我不想在 ClassA、ClassB、ClassC 实体中复制 Course 的属性,因为“扩展”会将父实体的属性复制到子实体。
这与继承无关。我需要保留上述数据库方案,而不添加其他实体的任何附加属性。
谢谢
【问题讨论】:
-
据我所知,您需要
Class(A|B|C)和Course之间的关系?是两个不同的数据库表吗? -
感谢您的回复。是的,它们是 4 个实体(数据库表)。关系应该基于 Course.class_type
标签: php database symfony orm doctrine