带有鉴别器的 Symfony 3 中的继承

Inheritence in Symfony3 with discriminator

我想在 symfony 中创建这个表描述:

一般作业:

课程:

作业 1:

作业 2:

所以最好的解决方案是使用这个关系模式:

[简单关系 ManyToOne](课程):Course.id <------> GeneralAssignment.course(GeneralAssignment)

[JOINED Ineritence 类型] (GeneralAssignment) : GeneralAssignment.type [1=Assignment1|2=Assignment2]

所以我会得到这个 class 模型(抱歉这张不好的照片):

问题

我以前创建这个模型是因为我想首先创建课程,然后使用课程 ID 创建 GeneralAssignment,最后使用一般作业的 ID 创建特定作业

问题是,我无法使用 Assignment1.general_assignment 在 Assignment1 和 GeneralAssignment 之间创建关系原则关系:"Cannot instantiate abstract class AssignmentGeneral"。 (Assignment2 和 AssignmentGeneral 之间相同)。

我需要 Assignment1.assignment_general 属性,因为我稍后要使用 Assignment1 和 Assignment2 classes,如果我不知道 general_assignment id,我就不能由于从 AssignmentGeneral 继承到特定的 Assignment classes (Assignment1, Assignment2)

,甚至知道作业的一般信息

AssignmentGeneral 是抽象的 class 因为 DiscriminatorMap 要求 class 应该是抽象的。

那我该怎么办?

我无法将 AssignmentGeneral 从 "abstract class" 设置为 "class" 并且我无法在 Assignment1(或 Assignment2)和 Assignment1

中的 GeneralAssignment 之间创建关系

PS : 这些 class 名称不是真实名称,但它们与我的实际问题类似。为了简单起见,我暴露了这个简单的问题。

非常感谢您的每一个回答

此致

[编辑] 我正在添加 AssignmentGeneral 声明

/**
 *
 * @ORM\Table(name="assignment_general")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="type", type="integer")
 * @ORM\MappedSuperclass
 * @ORM\DiscriminatorMap({
       1 = "Assignment1",
 *     2 = "Assignment2"
 * })
 */
abstract class StatisticsGeneralAbstract
{
 //...
}

还有:

/**
 *
 * @ORM\Table(name="assignment1")
 * 
 */
class Assignment1 extends AssignmentGeneral
{
//...
}

/**
 *
 * @ORM\Table(name="assignment2")
 * 
 */
class Assignment2 extends AssignmentGeneral
{
//...
}

Class table inheritance ('JOINED') 不要求父 class 是抽象的。

此外,继承的好处之一是在实例化子对象时获取父对象的属性class。所以你不必实例化两者,只需实例化 Assignment1Assignment2.

在课程实体和 assignmentType 属性 中添加它们的关系,以便您知道它链接到哪个。