symfony 2:命名空间“Acme”不包含任何映射实体

时间:2012-07-13 05:46:52

标签: php symfony doctrine

我正在关注这本书并在http://symfony.com/doc/current/book/doctrine.html

页面上

在阅读本书后,我正在努力研究产品和类别表的关系,而doctrine generate命令正在给我以下错误。

php app/console doctrine:generate:entities Acme
Generating entities for namespace "Acme"



  [RuntimeException]                                      
  Namespace "Acme" does not contain any mapped entities.  



doctrine:generate:entities [--path="..."] [--no-backup] name

THX

7 个答案:

答案 0 :(得分:19)

使用

doctrine:generate:entity

您将创建新实体。

当你用

手动添加一些属性时
doctrine:generate:entities AcmeDemoBundle:User

您将创建AcmeDemoBundle实体User的所有访问者(getter和setter)

答案 1 :(得分:6)

如果您的项目(仅限?)实体的命名空间不正确,也会出现此错误。如果您运行命令

$ php app/console doctrine:generate:entities MyBundle

并产生错误

  

[RuntimeException的]
  捆绑" MyBundle"不包含任何映射实体。

检查更具体的命令......

$ php app/console doctrine:generate:entities MyBundle:MyEntity

看看你是否收到错误:

  

[RuntimeException的]
  自动加载器预期类" MyBundle \ Entity \ MyEntity"   在文件" /path/to/MyBundle/Entity/MyEntity.php"中定义。   找到了该文件,但该类不在其中,类名或   命名空间可能有拼写错误。

如果是这样,那么,错误就会说明问题(希望如此),并且需要更正命名空间/类名。希望这对某人有帮助。

答案 2 :(得分:4)

解决方案:

更新symfony文件:

composer update

然后创建实体

php bin/console doctrine:generate:entities BackendBundle

答案 3 :(得分:2)

在书http://symfony.com/doc/current/book/doctrine.html实体中,已手动创建了Porduct。您在Product.php中编写了代码。有关实体字段的所有信息都包含注释 但实体类别已使用

创建

php app/console doctrine:generate:entity --entity="AcmeStoreBundle:Category" --fields="name:string(255)"

自动生成的实体 Caterory.php 不包含注释。 Symfony将信息存储在“Acme \ StoreBundle \ Resources \ config \ doctrine \ Category.orm.yml”中。 这就是为什么php app/console doctrine:mapping:info表示你只有一个映射实体 - 类别。

<强>解决
您可以使用doctrine:generate:entity生成产品实体 或
手动将有关Product实体的信息添加到“Acme \ StoreBundle \ Resources \ config \ doctrine \ Category.orm.yml”中

删除“Acme \ StoreBundle \ Resources \ config \ doctrine \ Category.orm.yml”并在Category.php中描述带注释的Category实体

答案 4 :(得分:2)

检查PHP开放和(可选)结束标记

<?php  

?>

在您的档案中是正确的。

从教程中复制粘贴时,它们不包含 http://symfony.com/doc/current/book/doctrine.html

我遇到了同样的问题。看完这篇文章之后,我开始想知道为什么语法高亮显示被破坏并发现开始和结束标签都丢失了。包含标签时错误消失了。

答案 5 :(得分:2)

我个人有错误,因为我错过了文件夹/目录&#34;实体&#34;。

答案 6 :(得分:1)

这两件事中的一件可能是问题,

  1. 确保在顶部有一个use语句,即

    use Acme\StoreBundle\Entity\Product;

    它不包含在示例中,它们仅显示 use Doctrine\Common\Collections\ArrayCollection;

  2. 如果实体位于不同的名称空间中,则指定目标实体时始终指定完整命名空间。  例如:

    @ORM\OneToMany(targetEntity="Acme\StoreBundle\Entity\Product", mappedBy="category")

    而不是:

    @ORM\OneToMany(targetEntity="Product", mappedBy="category")

    第二个只有在两个实体位于同一名称空间且该实体已被该类上方的use语句调用时才有效。