Symfony2错误:找不到名为的映射文件

时间:2012-03-01 22:55:10

标签: doctrine symfony mapping entity

我正在使用Symfony2,当我尝试生成架构($ php app / console doctrine:generate:schema)时出现错误..


    [Doctrine\ORM\Mapping\MappingException]                                                                             
      No mapping file found named 'xxx.UserBundle.Entity.User.php' for class 'xxx\UserBundle\Entity\User'.

我在proyect中只有2个Bundles:

  • UserBundle
  • FileBundle

我使用以下代码将FileBundle与UserBundle连接:


     
    /** 
    * @ORM\ManyToOne(targetEntity="xxx\UserBundle\Entity\User") 
    **/
    protected $user;      
    

文件的标题是这样的:


    
    namespace xx\UserBundle\Entity;

    use Doctrine\ORM\Mapping as ORM;

    /** 
     * @ORM\Entity
     **/
    class User
    { ###...###}
    

FileBundle非常相似.. 谢谢!

5 个答案:

答案 0 :(得分:26)

您正在混合Doctrine映射格式,您在Resources / config / doctrine中有注释和至少一个XML文件

来自symfony docs:

"A bundle can accept only one metadata definition format. For example,
it's not possible to mix YAML metadata definitions with annotated PHP
entity class definitions."

所以解决方案是:

您不能在给定的包中混合使用不同的Doctrine映射格式。因此要么为所有实体使用注释,要么为所有实体使用XML。

答案 1 :(得分:4)

对于我来说,使用PHPDriver进行ORM而不是AnnotationDriver,这有点奇怪,因为类中的数据库信息是注释。

无论如何,如果php app/console doctrine:mapping:info命令只给你一个实体意味着你的另一个包含User类的包没有加载到app / AppKernel.php文件中。通过添加行

加载UserBundle
new xxx\UserBundle\xxxUserBundle(),

$bundles函数中的registerBundles()数组。之后,此函数应如下所示:

public function registerBundles()
{
    $bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
        new xx\FileBundle\xxFileBundle(),
        new xxx\UserBundle\xxxUserBundle(),
    );

    if (in_array($this->getEnvironment(), array('dev', 'test'))) {
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
        $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
        $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
    }

    return $bundles;
}

当然,用你的真名改变'xx'和'xxx'。

希望这有帮助。

答案 2 :(得分:4)

我同意@ilanco 100%。此外,解决方案是删除文件夹中的任何.xml文件,例如:

  

C:\ XAMPP \ htdocs中\ localxyz \ SRC \的appbundle /资源/配置/教义/ Comment.orm.xml

运行此命令时创建的这些xml文件:

  

C:\ xampp \ htdocs \ localxyz> php app / console doctrine:mapping:import --force AppBundle xml

粪。

答案 3 :(得分:1)

美好的一天,

虽然我知道这已经在几年前发布了,但是我想在这里发布我的答案,也许它可以帮助某人:)

只是简单地清除缓存,但它适用于我

php bin/console cache:clear

由于

答案 4 :(得分:0)

我想不出为什么会发生这种情况,但我会在这里实现一个飞跃。

尝试编辑config.ymldoctrine部分应如下所示:

doctrine:
    dbal:
        default_connection: my_connection_name
        connections:
            fmefb:
                host:     %database_host%
                dbname:   %database_name%
                user:     %database_user%
                password: %database_password%
                driver:   %database_driver%
                port:     %database_port%
                charset:  UTF8

    orm:
        default_entity_manager: my_entity_manager
        entity_managers:
            my_entity_manager:
                connection: my_connection_name
                mappings:
                    CompanyNameSiteBundle: ~
                    CompanyNameAdminBundle: ~
                    CompanyNameSomethingElse: ~

注意底部的mappings列表。所有“链接”的包都包含在这里。

希望这会有所帮助......