Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony2 Error: No mapping file found named

I am using Symfony2 and when i try to generate the schema ($ php app/console doctrine:generate:schema) i got an error..


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

I only have 2 Bundles in the proyect:

  • UserBundle
  • FileBundle

I connect the FileBundle with the UserBundle with this code:


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

The headers of the files are something like this:


    
    namespace xx\UserBundle\Entity;

    use Doctrine\ORM\Mapping as ORM;

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

FileBundle is very similar.. Thanks!

like image 237
quique150 Avatar asked Mar 01 '12 22:03

quique150


4 Answers

It is somehow strange to me that you're using PHPDriver for ORM and not AnnotationDriver, since your database info in classes is in annotations.

Anyhow, if php app/console doctrine:mapping:info command gives you only 1 entity that means that your other bundle containing User class is not loaded in app/AppKernel.php file. Load your UserBundle by adding line

new xxx\UserBundle\xxxUserBundle(),

to the $bundles array in registerBundles() function. After that, this function should look something like this:

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;
}

Of course, change 'xx' and 'xxx' with your real names.

Hope this helps.

like image 72
Kosta Avatar answered Oct 21 '22 11:10

Kosta


You are mixing Doctrine mapping formats, you have annotations and at least one XML file in Resources/config/doctrine

From the 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."

So the solution is:

You cannot mix different Doctrine mapping formats in a given bundle. So either use annotations for all entities or use XML for all.

like image 25
ilanco Avatar answered Oct 21 '22 12:10

ilanco


I agree with @ilanco 100%. In addition, the solution is to REMOVE any .xml file in folder, for example:

C:\xampp\htdocs\localxyz\src\AppBundle/Resources/config/doctrine/Comment.orm.xml

these xml files created when you run such command:

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

Dung.

like image 4
Dung Avatar answered Oct 21 '22 13:10

Dung


Good day,

Although I know that this has been posted years ago, but will just like to post my answer here, perhaps it could help someone :)

just simply clear the cache, it works for me though

php bin/console cache:clear

Thanks

like image 1
jrran90 Avatar answered Oct 21 '22 11:10

jrran90