未定义的方法'getDoctrine'。方法名称必须以findBy或findOneBy开头

时间:2015-09-30 15:08:21

标签: symfony doctrine

我目前正在使用Symfony2,我收到此错误消息:

未定义的方法'getDoctrine'。方法名称必须以findBy或findOneBy开头! 500内部服务器错误 - BadMethodCallException

这是我的实体类:

 <?php

namespace Gestionresiduos\ResiduoBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity(repositoryClass="ResiduoRepository")
*/

class BodegaContieneResiduo
{


    /**
    * @ORM\Id
    * @ORM\column(type="integer")
    * @ORM\GeneratedValue
    */

    protected $idContiene;

.....

}

这是Controller的页面Action方法:

 <?php

namespace Gestionresiduos\ResiduoBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
    public function portadaAction()
    {
        $em = $this->getDoctrine()->getEntityManager();

        $ofertas= $em->getRepository('ResiduoBundle:BodegaContieneResiduo')->findResiduosAlmacenados();
        return $this->render('ResiduoBundle:Default:index.html.twig');
    }
}

这是我的EntityRepository:

    <?php
namespace Gestionresiduos\ResiduoBundle\Entity;

use Doctrine\ORM\EntityRepository;

class ResiduoRepository extends EntityRepository
{

    public function findResiduosAlmacenados()
    {
        $em = $this->getDoctrine()->getEntityManager();
        $consulta = $em->createQuery('SELECT r FROM ResiduoBundle:BodegaContieneResiduo');
        return $consulta->getOneOrNullResult();
    }
}

我也尝试过这个post的ScoRpion解决方案和K-Alex的post

那么,问题在哪里???

2 个答案:

答案 0 :(得分:14)

在Repository类中,而不是:

$em = $this->getDoctrine()->getEntityManager();

您应该使用:

$em = $this->getEntityManager();

参考:

http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.EntityRepository.html

答案 1 :(得分:2)

好的,首先:@ORM \ Entity(repositoryClass =“ResiduoRepository”)应该包含完整的命名空间。例如:MyCompany \ Namespace \ Repository

其次你有错字或者你正在调用错误的存储库:

$ofertas= $em->getRepository('ResiduoBundle:BodegaContieneResiduo')->findResiduosAlmacenados()

您正在调用BodegaContieneResiduo但是您将存储库定义为ResiduoRepository,您不会将其命名为classname而是存储库名称。