【发布时间】:2019-02-05 13:15:56
【问题描述】:
以下脚本来自https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/inheritance-mapping.html#mapped-superclasses,仅更改为包含第二个子类。据我了解,MappedSuperclassBase 不能单独存在,必须由一个且只有一个子类扩展(即EntitySubClassOne 或EntitySubClassTwo),并且与 SQL 的超类型/子类型概念相同。同意吗?
如何使用 YAML 或 XML 而非注解映射来定义超级/子类型?
<?php
/** @MappedSuperclass */
class MappedSuperclassBase
{
/** @Column(type="integer") */
protected $mapped1;
/** @Column(type="string") */
protected $mapped2;
/**
* @OneToOne(targetEntity="MappedSuperclassRelated1")
* @JoinColumn(name="related1_id", referencedColumnName="id")
*/
protected $mappedRelated1;
// ... more fields and methods
}
/** @Entity */
class EntitySubClassOne extends MappedSuperclassBase
{
/** @Id @Column(type="integer") */
private $id;
/** @Column(type="string") */
private $name;
// ... more fields and methods
}
/** @Entity */
class EntitySubClassTwo extends MappedSuperclassBase
{
/** @Id @Column(type="integer") */
private $id;
/** @Column(type="string") */
private $name;
// ... more fields and methods
}
【问题讨论】:
-
在您的链接上,向下滚动到此处:doctrine-project.org/projects/doctrine-orm/en/2.6/reference/… ;-)
-
@rkeet 除非我弄错了,否则该部分仅描述关联覆盖,而有问题的部分被省略并描述为
//other fields mapping。 -
您的问题是“如何使用 Yaml / XML”。如果您专门访问该链接,那里的代码示例顶部有选项卡,可让您切换语言。如果您阅读该代码,您会看到“如何”在此处映射请求的
MappedSuperClass。 (Yaml:type: mappedSuperclass,XML:<mapped-superclass name="MyProject\Model\User">) -
@rkeet 但它没有显示
@OneToOne(targetEntity="MappedSuperclassRelated1")和@JoinColumn(name="related1_id", referencedColumnName="id")的等价物,当然,这不是很难转换。更重要的是,它没有解释EntitySubClass是如何知道它与MappedSuperclassBase相关联的,而这正是我正在努力的部分。谢谢 -
如果
Worker扩展Person(超类),那么您有 1 个实体:工人。创建与Worker的关系(即来自Paycheck),仅链接到Worker。超类Person只是创建了一组用于 Worker 的基本属性/默认值。
标签: orm doctrine-orm doctrine superclass supertype