2016-01-09 2 views
3

Привет, ребята У меня проблема с одним запросом. Я создаю приложение на Symfony 2.7, и я хочу сделать запрос в репозитории, но когда я делаю это, вы получите исключение:Symfony DQL-запрос в репозитории

Неопределенный метод 'getDoctrine'. Имя метода должно начинаться с findBy или findOneBy!

Вот код в Repository:

namespace George\ObjectsBundle\Entity; 

/** 
* ObjectRepository 
* 
* This class was generated by the Doctrine ORM. Add your own custom 
* repository methods below. 
*/ 
class ObjectRepository extends \Doctrine\ORM\EntityRepository 
{ 
public function getOggallery() 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $query = $this->createQuery("SELECT o, a FROM George\ObjectsBundle\Entity\Object o JOIN o.ogallery a WHERE a.ord = 0"); 
    $objects = $query->getResult(); 

    return $objects; 
} 

} 

Но когда я возвращаю код в методе контроллера он работает.

$query = $em->createQuery("SELECT o, a FROM George\ObjectsBundle\Entity\Object o JOIN o.galleries a WHERE a.ord = 0"); 
$objects = $query->getResult(); 

Почему этот код не работает с администратором Doctrine Entity в репозитории?

ответ

6

Вы получаете эту ошибку, потому что вы вызываете несуществующий метод репозитория getDoctrine(). Попробуйте следующее:

class ObjectRepository extends \Doctrine\ORM\EntityRepository 
{ 
    public function getOggallery() 
    { 
     $em = $this->getEntityManager(); 
     $query = $this->createQuery("SELECT o, a FROM George\ObjectsBundle\Entity\Object o JOIN o.ogallery a WHERE a.ord = 0"); 
     $objects = $query->getResult(); 

     return $objects; 
    }  
} 
+0

Благодарим вас, что это работает! :) –

+3

'$ em' вообще не требуется ... Он уже привязан к QueryBuilder – mblaettermann

+1

Это действительно необходимо, потому что EntityRepository не имеет метода createQuery, это делает EntityManager. Таким образом, пример должен читать $ em-> createQuery (...); или даже $ this -> _ em-> createQuery (...); –

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