Doctrine 2 Xml Mapping无法正常工作

时间:2016-10-31 11:05:14

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

我一直致力于 Zend Framework Doctrine 我是新手所以请原谅我提出愚蠢的事情

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

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

我创建了一个类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 Mapping需要做什么?
  3. 上面我做错了什么。

1 个答案:

答案 0 :(得分: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没有关于此的文档,但它应该是这样的