如何在 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".
我想在 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".