我试图弄清楚超类映射在 Doctrine2 中是如何工作的,并且我有一些示例可以使用,但我一直在使用 xml 映射来创建我的实体,然后依次创建数据库模式。我找到了一个示例,该示例显示了“实体”标签的“扩展”参数,但当前模式似乎不支持它。
您如何告诉 XML 驱动程序哪些类应该扩展映射的超类?
西南
我试图弄清楚超类映射在 Doctrine2 中是如何工作的,并且我有一些示例可以使用,但我一直在使用 xml 映射来创建我的实体,然后依次创建数据库模式。我找到了一个示例,该示例显示了“实体”标签的“扩展”参数,但当前模式似乎不支持它。
您如何告诉 XML 驱动程序哪些类应该扩展映射的超类?
西南
您如何告诉 XML 驱动程序哪些类应该扩展映射的超类?
你不必:)
您可以简单地创建一个抽象类(让我们为其命名My\First\BaseClass
)并在 XML 中定义一个映射超类:
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping
xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"
>
<mapped-superclass name="My\First\BaseClass">
<!-- fields, etc -->
</mapped-superclass>
</doctrine-mapping>
接下来有一个实体类扩展这个映射超类。您甚至可以让实体类扩展映射超类,进而扩展另一个映射超类。
关键是:Doctrine 足够聪明,可以遍历所有 XML 映射文件,以便根据类继承确定完整的映射元数据集。您无需在 XML 中指定图形。