2015-09-30 2 views
3

В настоящее время я работаю с Symfony2, и я получаю это сообщение об ошибке:Неопределенный метод 'getDoctrine'. Имя метода должно начинаться с findBy или findOneBy

Неопределенный метод 'getDoctrine'. Имя метода должно начинаться с findBy или findOneBy! 500 Внутренняя ошибка сервера - BadMethodCallException

Это мой Entity Класс:

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

..... 

} 

Это метод страницы Действие Контролера:

<?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 и этого post от K-Alex

Итак, где ПРОБЛЕМА ???

+0

Внутри репозитория вы должны иметь доступ к диспетчеру сущности, как этот '$ this -> _ em'. Поэтому вы можете просто использовать: '$ this -> _ em-> createQuery()' – TheFrozenOne

ответ

10

В Repository классе, вместо:

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

Вы должны использовать:

$em = $this->getEntityManager(); 

Ссылка:

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

+0

Следует упомянуть, это должно быть изменено в репозитории. –

+0

Спасибо, я отредактировал. – Dric512

+0

Aaaah! вы спасатель жизни! –

2

Хорошо, первый: @ORM \ Entity (repositoryClass = "ResiduoRepository") должно содержать полное пространство имен. например: MyCompany \ Пространство имен \ Repository

Во-вторых у вас есть опечатка или вы звоните неправильный хранилищу:

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

Вы звоните BodegaContieneResiduo, но вы определили хранилище как ResiduoRepository, вы не называйте это имя_класса но имя репозитория.

+0

О, и вы должны последовать за Dric512 ответ тоже;) – Marco

Смежные вопросы