【问题标题】:Doctrine 2 Xml Mapping not workingDoctrine 2 Xml 映射不起作用
【发布时间】:2016-10-31 11:05:13
【问题描述】:

我一直在研究 Zend FrameworkDoctrine我是新手,所以请原谅我问愚蠢的事情

直到现在一切都很好,我正在创建我的实体并使用 DocBlock Annotations 映射它们。

现在我想为我的实体使用 XML 映射。

我创建了一个类Test.php,如下所示:

<?php

namespace Alpha\Entity;

class Test {

    protected $id;
    protected $name;

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getName() {
        return $this->name;
    }

    public function setName($name) {
        $this->name = $name;
    }

}

我使用以下Test.dcm.xml 进行 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">

    <entity name="Alpha\Entity\Test" table="test">
        <id name="id" type="integer">
            <generator strategy="AUTO" />
        </id>
        <field name="name" type="string" length="100" />
    </entity>
</doctrine-mapping>

当我尝试使用以下命令更新数据库时:

doctrine-module orm:schema-tool:update --force --dump-sql

我什么也没得到,它说数据库架构是最新的。我收到这条消息:

无需更新 - 您的数据库已与当前数据库同步 实体元数据。

我也在 module.config.php 中定义了我的实体并定义为使用 XmlDriver,请参阅下面的代码:

'doctrine' => array(
        'driver' => array(
            'alpha_driver' => array(
                'class' => 'Doctrine\ORM\Mapping\Driver\XmlDriver',
                'cache' => 'array',
                'paths' => array(__DIR__ . '/../src/Alpha/Entity')
            ),
            'orm_default' => array(
                'drivers' => array(
                    'Alpha\Entity' => 'alpha_driver'
                )
            )
        ),
    ),

问题:

  1. 我可以在一个模块中同时使用 DocBlock 和 Xml 映射吗?
  2. 如果我只想使用 Xml 映射,需要做什么?
  3. 我上面做错了什么。

【问题讨论】:

    标签: php xml doctrine-orm zend-framework2 doctrine


    【解决方案1】:
    1. 更改您的配置路径,因为它们指向错误的目录,例如:

      'doctrine' => array( 'driver' => array( 'alpha_driver' => array( 'class' => 'Doctrine\ORM\Mapping\Driver\XmlDriver', 'cache' => 'array', // do not use directory separator after paths 'paths' => array('.dcm.xml/files/dir') ), 'orm_default' => array( 'drivers' => array( 'Alpha\Entity' => 'alpha_driver' ) ) ), ),

      1. 文件名必须是例如您的情况:Alpha.Entity.Test.dcm.xml 没有关于此的文档,但应该是这样的

    【讨论】:

    • 你提到的“path.to.class.name.dcml.xml”拯救了我的一天!
    猜你喜欢
    • 1970-01-01
    • 2015-07-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    相关资源
    最近更新 更多