【问题标题】:how to specify what extends what in doctrine mappedsuperclass with xml mapping如何使用 xml 映射指定什么扩展了学说映射超类中的内容
【发布时间】:2015-01-07 18:28:48
【问题描述】:

我试图弄清楚超类映射在 Doctrine2 中是如何工作的,并且我有一些示例可以使用,但我一直在使用 xml 映射来创建我的实体,然后依次创建数据库模式。我找到了一个示例,它显示了“实体”标签的“扩展”参数,但当前架构似乎不支持它。

如何告诉 XML 驱动程序哪些类应该扩展映射的超类?

SW

【问题讨论】:

    标签: php xml doctrine-orm mappedsuperclass


    【解决方案1】:

    如何告诉 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 中指定图形。

    【讨论】:

    • 我在一个 Doctrine 网站上找到了一篇基本上给了我答案的帖子 - 它不能!解释是它是一个鸡/蛋delimma,所以他们离开了对从xml层定义继承的支持,并要求您使用带有注释的php来定义关系,所以我已经切换到使用注释而不是xml并且只是创建实体自己而不是使用命令行工具中的生成实体
    • 请注意,我遇到的问题是特定于让“生成实体”正常工作。据说xml配置不支持这一点。据推测,您可以自己创建实体(带或不带注释)并使用 xml 配置文件来描述架构。
    • 啊!手动创建实体确实是我所说的。当前不支持生成具有继承的实体,就像您发现的那样,但是关于实现它的机器学习已经有一些讨论。
    • PS:如果您在问题中提到您正在生成实体,那将会有所帮助;)
    猜你喜欢
    • 2012-06-19
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多