没有根据当前配置映射的学说ORM实体



我有一个可疑的问题。我有一组现有的带注释的Doctrine实体,这些实体已成功用于Symfony2/Doctrine2项目。但是,我目前正在将此项目的一些核心功能隔离到它自己的 Web 框架独立库中,我似乎无法让实体正常运行。

目前,我主要担心的是Doctrine CLI实用程序给我的结果好坏参半。

当我执行以下操作时:

bin/doctrine orm:validate-schema

我得到以下输出:

[Mapping]  OK - The mapping files are correct.
[Database] OK - The database schema is in sync with the mapping files.

但是当我这样做时:

bin/doctrine orm:info

我明白这个:

[Exception]                                                                                                                                                                             
You do not have any mapped Doctrine ORM entities according to the current configuration. If you have entities or mapping files you should check your mapping configuration for errors.

我已经检查了无数次我的配置。我什至删除了我所有的实体,并在其中留下了一个最基本的用户实体,给了我相同的场景。

这些好坏参半的结果可能是什么?

事实证明,设置的标准 Doctrine 配置 [1] 不适用于我的代码库或我测试过的任何代码库,也许文档已经过时了。在互联网上耕耘了几个小时之后,这是最终使它为我工作的配置:

use DoctrineORMToolsSetup;
use DoctrineORMEntityManager;
use DoctrineCommonAnnotationsAnnotationReader;
$paths = array( realpath(__DIR__."/../src/My/Entity") );
$isDevMode = TRUE;
// the connection configuration
$dbParams = array(
    'driver'   => 'pdo_mysql',
    'user'     => 'myuser',
    'password' => 's3cr3t',
    'dbname'   => 'mydb',
);
$cache = new DoctrineCommonCacheArrayCache();
$reader = new AnnotationReader();
$driver = new DoctrineORMMappingDriverAnnotationDriver($reader, $paths);
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$config->setMetadataCacheImpl( $cache );
$config->setQueryCacheImpl( $cache );
$config->setMetadataDriverImpl( $driver );
$entityManager = EntityManager::create($dbParams, $config);
//-- This I had to add to support the Mysql enum type.
$platform = $entityManager->getConnection()->getDatabasePlatform();
$platform->registerDoctrineTypeMapping('enum', 'string');

[1] http://docs.doctrine-project.org/en/latest/tutorials/getting-started.html

接受的答案是可以的,但同样的事情可以用不那么冗长的方式实现:

use DoctrineORMToolsSetup;
use DoctrineORMEntityManager;
$paths = array( realpath(__DIR__."/../src/My/Entity") );
$isDevMode = TRUE;
// the connection configuration
$dbParams = array(
    'driver'   => 'pdo_mysql',
    'user'     => 'myuser',
    'password' => 's3cr3t',
    'dbname'   => 'mydb',
);
$config = Setup::createAnnotationMetadataConfiguration(
    $paths, $isDevMode, null, null, false
);
$config->setQueryCacheImpl(new DoctrineCommonCacheArrayCache());
$entityManager = EntityManager::create($dbParams, $config);
//-- This I had to add to support the Mysql enum type.
$platform = $entityManager->getConnection()->getDatabasePlatform();
$platform->registerDoctrineTypeMapping('enum', 'string');

这里只是关于是否使用简单的注释驱动程序(Setup::createAnnotationMetadataConfiguration 函数的最后一个参数。默认情况下,使用简单的批注驱动程序,该驱动程序无法识别 @ORM\Entity 批注。

我在Ressources/config/doctrine/Foo.orm.php中有PHP实体但我使用注释。

orm = [Exception]来说太不同了

根据当前配置,您没有任何映射的教义ORM实体。如果您有实体或映射文件,则应检查映射配置是否存在错误。

只需删除错误的实体文件

对我来说,碰巧我从其他系统导入了供应商目录,但它无法正常工作。

一个简单的composer installphp composer.phar install修复它。

相关内容

  • 没有找到相关文章

最新更新