Symfony2没有要处理的元数据类

时间:2014-03-08 10:18:15

标签: php symfony orm doctrine-orm

创建实体后:

php app/console doctrine:generate:entity

并在使用时:

php app/console doctrine:schema:update --force

我遇到了:

  

没有要处理的元数据类。

实体

namespace ISLab\AdminBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="menu_items")
 */
class MenuItem
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(name="parent", type="integer")
     */
    private $parent;

    // ...
}

9 个答案:

答案 0 :(得分:11)

我遇到了类似的问题并花了一段时间才找到如何清除缓存。仅清除学说的缓存对我不起作用。使用以下命令清除整个环境(在本例中为生产环境)

php app/console cache:clear --env=prod

答案 1 :(得分:5)

因此,实体经理没有为您的实体创建元数据。以下是我首先要检查的事项:

  1. 清除缓存
  2. 确保您的AdminBundle已在AppKernel中注册。
  3. 确保实体经理的自动化为true。或者,如果您使用自定义EM,请正确设置。
  4. 有点偏离主题:

    我发现你正在创建一个菜单系统,我强烈建议你查看Doctrine Extensions Tree,它可以让你比你的结构更有效地查询和编辑项目。

答案 2 :(得分:5)

当我从命令行通过交互式生成器生成实体时遇到了同样的问题。当我第一次创建时,我将配置格式设置为 PHP ,但这不起作用。所以我删除了它并再次尝试,但这次我选择了 format = annotation 。然后它工作了!也许这可以解决某人的问题。

答案 3 :(得分:5)

我更新数据库时遇到了同样的问题。 所以我遵循这个解决方案,我试图适应我的情况,它的工作原理。 我认为这也是自动化的问题,当auto_mapping设置为true时,symfony也无法找到实体。 我希望它可以提供帮助。

  orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    naming_strategy: doctrine.orm.naming_strategy.underscore
    auto_mapping: true
    mappings:
        AppBundle:
            type: annotation
            is_bundle: false
            dir: %kernel.root_dir%/../src/AppBundle/Entity/
            prefix: AppBundle\Entity
            alias: AppBundle

答案 4 :(得分:1)

对于同一件事的任何人来说,这几步是:

1。清除缓存:

bin/console c:c --env=dev
bin/console c:c --env=prod

如果您同时发现任何错误,请尝试通过检查问题来源来解决。

2。检查您的配置:

根据此示例目录结构:

Application
|
└- src
   |
   └- Acme
      |
      └- Bundle
         |
         └- BlogBundle
            |
            └- Model
               |
               └- Entity

您应该在app/config/config.yml文件中包含此配置:

doctrine:

    ...

    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            AcmeBlogBundle:
                mapping: true
                type: annotation
                dir: Model/Entity
                alias: Blog
                prefix: Acme\Bundle\BlogBundle\Model\Entity
                is_bundle: true

3。更新数据库架构:

您现在可以毫无问题地更新数据库架构:

bin/console doctrine:schema:update

尽管这是大多数情况下的最后一步,但您仍然可以使用--verbose来查找任何其他可能的问题。

bin/console doctrine:schema:update --verbose

答案 5 :(得分:0)

确保您的实体放在捆绑包的Entity目录中。在我的情况下,他们改为Entities

答案 6 :(得分:0)

对我来说,从cmd生成所有实体都可以完成工作。

答案 7 :(得分:0)

就我而言,我解决了创建实体文件夹的问题。由于某种原因,它已被淘汰。我希望它可以提供帮助。

答案 8 :(得分:0)

我遇到了同样的问题。对我来说,我的名为'Entity'的目录不是在'AppBundle'中,而是在'src'目录中。将'Entity'目录移动到'AppBundle'目录为我解决了问题!