文档或我有问题。我做所有文件所说的。
当我输入终端时:
$ php vendor/bin/doctrine orm:schema-tool:create
输出是:
No Metadata Classes to process
我读了很多帖子,谷歌并尝试了很多例子,但什么也没有。
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/getting-started.html
文档或我有问题。我做所有文件所说的。
当我输入终端时:
$ php vendor/bin/doctrine orm:schema-tool:create
输出是:
No Metadata Classes to process
我读了很多帖子,谷歌并尝试了很多例子,但什么也没有。
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/getting-started.html
我认为您从Doctrine2 中获取了配置示例:入门:
$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration([__DIR__."/src"], $isDevMode);
现在的诀窍是该Setup::createAnnotationMetadataConfiguration
方法SimpleAnnotationReader
默认使用 a 。您可以通过将第五个参数更改为false
:
$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration([__DIR__."/src"], $isDevMode, null, null, false);
这将迫使 DoctrineAnnotationReader
现在使用可以处理您的模型的非简单模型!
TL;DR:确保您创建的元数据类型与您使用的“创建元数据配置”方法相匹配。
我在阅读 Doctrine “Getting Started” 指南时遇到了同样的问题。在浏览了 Doctrine 代码之后,我发现出了什么问题。基本上,教程中“获取EntityManager”部分的代码是:
$config = Setup::createAnnotationMetadataConfiguration([__DIR__ . "/src"], $isDevMode);
在本教程的“从产品开始”部分中,它向我们展示了如何设置元数据,并为每个可能的选项提供了一个示例。教程说:
实体的元数据使用 XML、YAML 或 Docblock Annotations 进行配置。本入门指南将显示所有映射驱动程序的映射。文中将引用 XML 映射。
由于这个声明,我决定使用 XML 配置。不幸的是,createAnnotationMetadataConfiguration
教程代码中的方法似乎没有使用我创建的 XML 文件。(事后看来,这个方法专门指的是注解元数据,而不是 XML 元数据,这似乎更加明显! )
在我将其更改为之后createXMLMetadataConfiguration
,它按预期工作。所以看起来这个问题的一个可能来源是您使用的“创建元数据配置”方法可能与您创建的元数据类型不匹配。
尝试清除缓存:
sudo -u www-data php app/console cache:clear --env=dev
在 bootstrap.php 中取消注释以下行之一:
// or if you prefer yaml or XML
//$config = Setup::createXMLMetadataConfiguration(array(__DIR__."/config/xml"), $isDevMode);
//$config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/config/yaml"), $isDevMode);
这取决于您创建的是 yaml 还是 xml 元配置文件...
希望这可以帮助。
自定义 Doctrine 安装有同样的问题。我的解决方案是重新设置元数据驱动程序:
$config->setMetadataDriverImpl(
new Doctrine\ORM\Mapping\Driver\AnnotationDriver(
new Doctrine\Common\Annotations\CachedReader(
new Doctrine\Common\Annotations\AnnotationReader(),
new Doctrine\Common\Cache\ArrayCache()
),
ENTITY_DIR
)
);
来自http://support.skipper18.com/1120/how-use-external-tools-generate-doctrine-getters-and-setters?show=1121#a1121的解决方案 我的场景是从现有数据库生成实体
newDefaultAnnotationDriver添加命名空间,方法注释说明如下:
如果 $useSimpleAnnotationReader 为真,则表示法
@Entity
将起作用,否则,@ORM\Entity
将支持表示法。
在新的 ZF2 模块中创建新的学说配置时,我遇到了同样的问题。
问题是由
'User\Entity' => 'property_entities'
用户部分来自旧实体
'Property\Entity' => 'property_entities'
更改以解决问题
如果您使用 XML 映射(使用Setup::createXMLMetadataConfiguration()
),您可能需要注意以下几点:
.dcm.xml
,而不仅仅是.xml
.Company\Solution\Models\User
,您的 XML 路径中必须有Company.Solution.Models.User.dcm.xml
映射文件。就我而言,问题在于用于注释的星号数量
<?php
namespace Models;
use Doctrine\ORM\Annotation\{Id, Column, GeneratedValue, Entity};
/** // I originally used one asterisk here and kept getting the error in question. Error disappeared after doubling the asterisk as it is in this answer
* @Entity(repositoryClass="Doctrine\ORM\Annotation\Id")
*/
class User {
}
?>
尝试以下命令:
php vendor/bin/doctrine-module orm:schema-tool:create