webrama.pl
webrama.pl

Reputation: 1890

Symfony2/Doctrine can't find mapping file for custom Repository class

I love doctrine but I have some problems with mapping/annotations. At start I used mapping files. Then I converted in into annotations. Now I want o create custom repository class so I did as I read here: http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes.

Unfortunately now I have an error:

No mapping file found named '\src\Vendor\ProductBundle\Resources\config\doctrine/SynchronizationSettingRepository.orm.yml' for class 'Vendor\ProductBundle\Entity\SynchronizationSettingRepository'. 

Of course I don't have this file becouse I don't use mapping anymore. I've added:

  * @ORM\Entity(repositoryClass="Vendor\ProductBundle\Entity\SynchronizationSettingRepository") 

to parent and regenerated entities. I have regenerate Entites by command php app/console doctrine:generate:entities VendorProductBundle and still nothing. Regural and doctrine meadata cache is clear.

Here is a YML which from I want to generate custom Repository one more time:

Vendor\ProductBundle\Entity\SynchronizationSetting:
    type: entity
    table: synchronization_setting
    repositoryClass: Vendor\SynchronizationSetting\Entity\SynchronizationSettingRepository
    indexes:
        id_product:
            columns:
                - id_product
    id:
        id:
            type: integer
            nullable: false
            unsigned: true
            comment: ''
            id: true
            generator:
                strategy: IDENTITY
    fields:
        open:
            type: string
            nullable: true
            length: 1
            fixed: true
            comment: ''
            default: '0'
        internet:
            type: string
            nullable: true
            length: 1
            fixed: true
            comment: ''
            default: '0'
    manyToOne:
        idProduct:
            targetEntity: Product
            cascade: {  }
            mappedBy: null
            inversedBy: null
            joinColumns:
                id_product:
                    referencedColumnName: id
            orphanRemoval: false
    lifecycleCallbacks: {  }

And here is a repository class:

<?php
    // src/Acme/StoreBundle/Entity/ProductRepository.php
    namespace Vendor\ProductBundle\Entity;
    use Doctrine\ORM\EntityRepository;

    class SynchronizationSettingRepository extends EntityRepository
    {
        public function findAllOrderedByName()
        {
            return $this->getEntityManager()
                ->createQuery(
                    'SELECT p FROM AcmeStoreBundle:Product p ORDER BY p.name ASC'
                )
                ->getResult();
        }
    }

Upvotes: 3

Views: 2497

Answers (1)

Jovan Perovic
Jovan Perovic

Reputation: 20193

I think that adding @ORM\Entity did very little good as complete .php class file gets overwritten as soon as you run the doctrine:generate:entities. You need to add repositotyClass to your YML file instead.

If you switched to annotations for good, those .yml files (actually whole doctrine directory within config) are useless, apart as being intermediate files for generating annotaion-based entities.

Another thing: It seams that Doctrine thinks you have a entity with name ending with "Repository".

Can you show us the content of YML file? If you don't have it (as you said), generating entities will not be possible. You can always generate annotaion-based entities directly (no need for YML intermediates)

Upvotes: 2

Related Questions