我目前正在使用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
那么,问题在哪里???
答案 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而是存储库名称。