在CouchDb Symfony2中映射实体

时间:2015-07-22 21:49:29

标签: php symfony doctrine-orm couchdb

我在symfony 2.7.2中使用couchDb。

我有几个疑问。 现在我安装了这个Bundle

我创建了一个用于测试的实体

<?php

namespace foo\GarageBundle\Document;

use Doctrine\ODM\CouchDB\Mapping\Annotations as CouchDB;

/**
 * @CouchDB\Document
 */
class Utente
{

    /** @CouchDB\Id */
    private $id;

    /** @CouchDB\Field(type="string") */
    private $nome;


    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set nome
     *
     * @param string $nome
     * @return Utente
     */
    public function setNome($nome)
    {
        $this->nome = $nome;

        return $this;
    }

    /**
     * Get nome
     *
     * @return string
     */
    public function getNome()
    {
        return $this->nome;
    }
}

在我的控制器中,我添加了此代码

    $dm = $this->container->get('doctrine_couchdb.client.default_connection');
    $doc = $this->container->get('doctrine_couchdb.odm.default_document_manager');

    try{
        $dm->createDatabase($dm->getDatabase());
    }catch(\Exception $e){
        $msg = $e->getMessage();
    }

    $user = new Utente();
    $user->setNome('foo');
    $doc->persist($user);
    $doc->flush();

我的config.yml是

doctrine_couch_db:
  client:
    default_connection: default
    connections:
        default:
            dbname: symfony2
  odm:
    default_document_manager: default
    document_managers:
        default:
            auto_mapping: true

使用控制器我创建了数据库,但我无法插入新文档,我收到此错误

The class 'foo\GarageBundle\Document\Utente' was not found in the chain configured namespaces

我不明白为什么使用捆绑包作为我正在使用的东西是有用的(我知道这可能是一个愚蠢的问题),为什么我必须使用* @CouchDB\Document而不是{{1}在我的实体里面?

2 个答案:

答案 0 :(得分:2)

似乎与实体类的命名空间有关的问题。

  

自动化正在注册the CouchDocument subnamespace   你的捆绑,而不是文档(由自动映射   DoctrineMongoDBBundle)

因此,请为User类和您使用的其他Counch使用不同的命名空间,如下所示:

namespace foo\GarageBundle\CouchDocument;

特别是:

<?php

namespace foo\GarageBundle\CouchDocument;

use Doctrine\ODM\CouchDB\Mapping\Annotations as CouchDB;

/**
 * @CouchDB\Document
 */
class Utente
{

希望这个帮助

请参阅this discussion on github

答案 1 :(得分:-1)

/**
 * @CouchDB\Document
 * @CouchDB\Index
 */
class Utente
{