【问题标题】:Symfony3 error Namespace does not contain any mapped entitiesSymfony3错误命名空间不包含任何映射实体
【发布时间】:2016-04-27 09:12:50
【问题描述】:

我尝试在 Symfony 3.0.1 中生成 getter 和 setter

当我运行命令时

php bin/console doctrine:generate:entities VendorName/MyBundle/EntityName

我有错误

Namespace "VendorName\MyBundle\EntityName" does not contain any mapped entities.

哪里出错了?

Edit-1:首先生成YAML格式的实体

Edit-2:我尝试为供应商包生成 getter 和 setter

我也尝试使用命令 php bin/console dictionary:generate:entities VendorNameMyBundle:EntityName 并有另一个错误:

Can't find base path for "VendorName\MyBundle\Entity\EntityName" (path: "/home/site/vendor/vendorname/mybundle/Entity", destination: "/home/site/vendor/vendorname/mybundle/Entity").  

【问题讨论】:

  • 您是否首先生成了带有注释映射的实体类? (或 YAML、XML 映射等)。这里是documentation
  • 首先生成YAML格式的实体
  • 你的实体类的路径是什么? MyBundle\Entity\EntityName? VendorNameMyBundle 是有效且已注册的捆绑包名称吗?
  • VendorNameMyBundle 是一个有效且已注册的捆绑包名称
  • 您的 EntityName.php 文件保存在哪里? EntityName.php 中的命名空间值是什么? EntityName.php 中的类名是什么?

标签: php doctrine-orm symfony


【解决方案1】:

正如John Pancoast 在他的answer 中指出的另一个问题:

Doctrine 在代码生成方面不支持 PSR-4。这与它们如何将类命名空间映射到文件系统路径以及 PSR-4 如何允许不直接映射到文件系统的类/命名空间路径有关。

https://github.com/doctrine/DoctrineBundle/issues/282

阐明解决错误消息所需的确切内容;您必须编辑捆绑包的 composer.json 文件,并更改捆绑包的文件夹结构。

composer.json 中将psr-4 更改为psr-0

"autoload": {
    "psr-4": { "Acme\\Bundle\\AwesomeBundle\\": "" }
},

到:

"autoload": {
    "psr-0": { "Acme\\Bundle\\AwesomeBundle\\": "" }
},

从以下位置更改捆绑包的文件夹结构:

vendor
 +--acme
     +--awesome-bundle
         |--Controller
         |--Entity

到:

vendor
 +--acme
     +--awesome-bundle
         +--Acme
             +--Bundle
                 +--AwesomeBundle
                     |--Controller
                     |--Entity

以下命令将不再抛出异常:

bin/console doctrine:generate:entities AwesomeBundle

【讨论】:

    【解决方案2】:

    您的命令有误,您尝试生成实体,但您为一个实体提供了类名。对所有实体尝试以下操作:

    php bin/console doctrine:generate:entities VendorName/MyBundle
    

    或者如果你只想要一个实体:

    php bin/console doctrine:generate:entity VendorName/MyBundle/EntityName
    

    【讨论】:

      【解决方案3】:

      带有 src/AppBundle/Entity/User.php 的 Symfony 3.22

      如果您使用 ORM 添加新字段

      **/**
       * @ORM\Column(name="last_login", type="datetimetz")
       */
      private $lastLogin;**
      

      只需使用

      使用 php bin/console 学说:generate:entities AppBundle

      它将检查您的所有实体 r 并更新 getter 和 setter

      然后使用

      php bin/console dictionary:schema:update 来更新你的数据库

      使用

      在 PROD 环境中的 php bin/console 学说:schema:update --force

      【讨论】:

      • 赞成这个“使用 php bin/console 原则:generate:entities AppBundle”我总是指定实体,但只指向一个包更容易。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多