如何在 Symfony2 中集成 table 继承

How to integrate table inheritance in Symfony2

我想在 Symfony2 中实现 table 继承。 有可能 here 使用 symfony1.4.

如何将它与带有 注释模式 的 symfony2 一起使用?

感谢您抽出宝贵的时间来看这篇文章!

As explained in doctrine documentation,您可以将 table 继承与注释一起使用 单 table 继承 class table继承.

单一table继承:

<?php
namespace MyProject\Model;

/**
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
 */
class Person
{
    // ...
}

/**
 * @Entity
 */
class Employee extends Person
{
    // ...
}

Class table继承:

<?php
namespace MyProject\Model;

/**
 * @Entity
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
 */
class Person
{
    // ...
}

/** @Entity */
class Employee extends Person
{
    // ...
}

在第一种情况下,所有记录将存储在同一个table中,并有一个字段来区分它们的不同类型。

在第二种情况下,"parent" table 将包含所有具有 classes 之间的公共字段的记录,以及取决于 classes 的其他字段将存储在不同的 table 中用于扩展 classes.

您可以根据需要选择使用哪一个。
在第一种情况下,扩展 class 中有很多属性会导致 table 中有很多空字段,而在第二种情况下,您必须合并两个 [=45] =]s("parent" 和扩展的)获取记录的所有字段。

your linked Symfony1.4 documentation比较,单table继承相当于SF1.4的"Column Aggregation Table Inheritance Strategy",而classtable继承相当于SF1.4的"Concrete Table Inheritance Strategy".