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);