[英]Modeling of inherited entities in Symfony2
我有一個稱為Type的Entity,類型具有data1,data2和data3作為屬性。 我想擁有同時擴展Type的Type1和也擴展Type的Type2
舉個例子
Class Type
{
private $data1;
private $data2;
private $data3;
}
Class Type1 extends Type
{
private $data4;
}
Class Type2 extends Type
{
private $data5;
}
我想在我的Symfony實體中使用它,並且它必須與Doctrine一起使用。
考慮您的示例,請使用以下Doctrine注釋:
use Doctrine\ORM\Mapping AS ORM;
/**
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="Type_Disc", type="string")
* @ORM\DiscriminatorMap({"type1" = "Type1", "type2" = "Type2"})
*/
Class Type
{
/**
* @ORM\Column(name="data1", type="integer")
*/
private $data1;
/**
* @ORM\Column(name="data2", type="integer")
*/
private $data2;
/**
* @ORM\Column(name="data3", type="integer")
*/
private $data3;
}
/**
* @ORM\Entity
*/
Class Type1 extends Type
{
/**
* @ORM\Column(name="data4", type="integer")
*/
private $data4;
}
/**
* @ORM\Entity
*/
Class Type2 extends Type
{
/**
* @ORM\Column(name="data5", type="integer")
*/
private $data5;
}
作為額外的信息,您需要一個稱為“ discriminator column”(這里稱為Type_Disc
)的東西,以便ORM可以區分實體的類型。 您不必將其映射到實體值,但是它必須存在於您的模式中。 在鑒別符映射中,您可以告訴這些類將哪些值映射到鑒別符列。 例如,在此示例中, Type1
將映射到Type_Disc
type1
。 您也可以使用數字,在這種情況下,它將是這樣的:
/**
...
* @ORM\DiscriminatorColumn(name="Type_Disc", type="integer")
* @ORM\DiscriminatorMap({0 = "Type1", 1 = "Type2"})
*/
請記住,模式必須使用SQL偽語言,如下所示:
CREATE TABLE Type1 (
id int not null primary key autoincrement(1,1), /*This has to be defined somewhere in your entity*/
Type_Disc nvarchar(50) not null,
data1 integer not null,
data2 integer not null,
data3 integer not null
)
CREATE TABLE Type2 (
id int not null primary key,
data4 integer not null,
foreign key (id) references Type1(id)
)
CREATE TABLE Type3 (
id int not null primary key,
data5 integer not null,
foreign key (id) references Type1(id)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.