我按照the cookbook中描述的步骤进行操作。但是当我运行 doctrine:mapping:info
或 doctrine:generate:entities
时,学说会忽略我的文件。
这是代码,也许有人有建议。
自动加载.php
use Doctrine\Common\Annotations\AnnotationRegistry;
use Composer\Autoload\ClassLoader;
/**
* @var $loader ClassLoader
*/
$loader = require __DIR__.'/../vendor/autoload.php';
AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
use Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver;
AnnotationDriver::registerAnnotationClasses();
return $loader;
Composer .json
"doctrine/orm": ">=2.2.3,<2.4-dev",
"doctrine/mongodb-odm": "1.0.*@dev",
"doctrine/mongodb-odm-bundle": "3.0.*@dev",
"doctrine/doctrine-bundle": "1.2.*",
"doctrine/doctrine-fixtures-bundle": "dev-master",
"doctrine/doctrine-migrations-bundle": "dev-master",
config.yml:
doctrine_mongodb:
connections:
default:
server: mongodb://localhost:27017
options: {}
default_database: test_database
document_managers:
default:
auto_mapping: true
实体:
<?php
// src/Acme/StoreBundle/Document/Product.php
namespace Anchorbrands\Bundle\LandingpageBundle\Entity;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Document
*/
class Product
{
/**
* @MongoDB\Id
*/
protected $id;
/**
* @MongoDB\String
*/
protected $name;
/**
* @MongoDB\Float
*/
protected $price;
}
最佳答案
错误的命名空间/文件夹:)
namespace Anchorbrands\Bundle\LandingpageBundle\Entity;
应该是
namespace Anchorbrands\Bundle\LandingpageBundle\Document;
文档通常位于Document文件夹中。
实体文件夹/命名空间适用于 ORM,而非 ODM。
查看文档 here .
命令错误
对于 mongodb/doctrine odm,您需要使用...
app/console doctrine:mongodb:generate:documents AnchorbrandsLandingpageBundle
...而doctrine:generate:entities
用于教义orm。
关于mongodb - Symfony2 和 MongoDB 注释/映射无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17103934/