簡體   English   中英

Symfony2中繼承實體的建模

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM