Database design 学说是否支持多态关系?

Database design 学说是否支持多态关系?,database-design,doctrine-orm,relational-database,polymorphic-associations,Database Design,Doctrine Orm,Relational Database,Polymorphic Associations,有一个类型/表EveryoneNeedsMe/每个人都需要我(在我的具体案例中,它是消息/消息)。实际上有多种类型/表格需要它,例如Foo/Foo或Bar/Bar。我想使用多态关系模式(或多态关联): 一些ORM(如Elount,s.)支持多态关系模式。信条2也支持它吗 如果是:如何在原则2中使用它?如果否:如何使用条令处理此情况?是,条令支持多重继承映射。 但如果我清楚地理解,您希望每个实体在DB中都有自己的表 所以您可以这样做,定义父类 /** * @ORM\Entity * @ORM

有一个类型/表
EveryoneNeedsMe
/
每个人都需要我
(在我的具体案例中,它是
消息
/
消息
)。实际上有多种类型/表格需要它,例如
Foo
/
Foo
Bar
/
Bar
。我想使用多态关系模式(或多态关联):

一些ORM(如Elount,s.)支持多态关系模式。信条2也支持它吗


如果是:如何在原则2中使用它?如果否:如何使用条令处理此情况?

是,条令支持多重继承映射。 但如果我清楚地理解,您希望每个实体在DB中都有自己的表

所以您可以这样做,定义父类

/**
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({"foo"="Foo","bar"="Bar"})
 */
abstract class ParentClass
{

    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Message")
     */
    protected $message;

   //getter,setter,other code
}
您的类
Foo
Bar
将扩展
ParentClass
,例如

/**
 * @ORM\Entity()
 */
class Foo extends ParentClass
{
    /**
     * @ORM\Column(type="string")
     */
    protected $body;
}
所以在那之后你可以

$foo = new Foo();
$foo->setId(1);
$foo->setBody('Some Text');
$foo->setMessage($messageObject);
$entityManager->persist($foo);
$entityManager->flush();
parentclass
表中执行此操作之后,您将得到如下内容

| id         | message_id | discr      |
|------------|------------|------------|
| 1          |        1*  |     foo     
然后在你的代码中你可以

$fooObject = $entityManager->getRepository(ParentClass::class)->find(1);
在本例中,条令将自动返回使用该
id
持久化的对象
Foo
对象

完整文档,另一种处理继承映射的方法,如
“SINGLE_TABLE”
,您可以查看

$fooObject = $entityManager->getRepository(ParentClass::class)->find(1);