Symfony2 - 找不到自定义存储库

时间:2012-07-31 14:15:35

标签: php symfony doctrine-orm repository

我有这个错误:

  

致命错误:第578行的C:\ wamp \ www \ Videotheque \ vendor \ doctrine \ lib \ Doctrine \ ORM \ EntityManager.php中找不到类'gsyle39 \ VideothequeBundle \ Repository \ GenreRepository'

然而,我将存储库类的名称添加到我的实体的映射定义中:

/**
* gsyle39\VideoThequeBundle\Entity\Genre
*
* @ORM\Table()
*
* @ORM\Entity(repositoryClass="gsyle39\VideothequeBundle\Repository\GenreRepository")
*/
class Genre
{
   ...
}

这是我的GenreRepository:

<?php

namespace gstyle39\VideothequeBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * GenreRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class GenreRepository extends EntityRepository
{
    public function myfindAll()
    {
        $genres = $this->_em->createQueryBuilder('g')
            // leftJoin because I need all the genre
            ->leftJoin('g.films', 'f')
            ->addSelect('COUNT(f)')
            ->groupBy('g')
            ->getQuery()
            ->getArrayResult();

        // $genres contains all the genres and the associated movies
        return ($genres);
    }
}  

最后,这是我用来调用我的客户“findALL”的控制器中的方法:

public function getListGenresAction(){

        $liste_genres = $this->getDoctrine()
                             ->getEntityManager()
                             ->getRepository('gstyle39VideothequeBundle:Genre')
                             ->myFindAll;

        return $this->render('gstyle39VideothequeBundle:Videotheque:test.html.twig', array(
            'genres' => $liste_genres
        ));
   }

1 个答案:

答案 0 :(得分:3)

您的存储库具有名称空间namespace gstyle39\VideothequeBundle\Entity;,注释表明它应该是namespace gstyle39\VideothequeBundle\Repository;

另外,请确保将其放在src/gstyle39/VideothequeBundle/Repository目录下。