2016-10-02 5 views
1

я пытаюсь понять, как сделать QueryBuilder в службе, так вот то, что я сделал:Пытались вызвать неопределенный метод под названием «createQueryBuilder»

Создать свой сервис:

namespace OC\PlatformBundle\PurgerAdvert; 

use Doctrine\ORM\EntityManager; 

class PurgerAdvert 
{ 

    private $em; 

    public function __construct(EntityManager $em) { 
     $this->entityManager = $em; 

    } 

    public function purge($days) 
    { 

$queryBuilder = $this->createQueryBuilder(); 
$queryBuilder->select('a')->from('OCPlatformBundle:Advert', 'a'); 

// get the Query from the QueryBuilder here ... 
$query = $qb->getQuery(); 
return $result = $query->getResult(); 
    } 

} 

Объявить его в services.yml:

oc_platform.purger.advert: 
     class: OC\PlatformBundle\PurgerAdvert\PurgerAdvert 
     arguments: ['@doctrine.orm.entity_manager'] 

я удалить запрос, потому что я имею ошибку до того, что: "Attempted to call an undefined method named "createQueryBuilder" of class "OC\PlatformBundle\PurgerAdvert\PurgerAdvert"" Я предполагаю, что я не называю должным образом EntityManager, но я не вижу мои мили ставка ...

Спасибо за вашу помощь :)

+0

Просто замените '$ this-> createQueryBuilder()' this '$ em-> createQueryBuilder()' – ciurciurek

+1

Лучше, если вы измените 'private $ entityManager' вместо' private $ em', чтобы использовать '$ this-> entityManager -> createQueryBuilder() '. –

+0

Я пробовал решение ciurciurek, но ошибка «Примечание: неопределенная переменная: em»/Решение gp_sflover работает! спасибо :) –

ответ

0

Вы можете не хотите набирать entityManager все время, так что сочетание обоих ответов должно работать:

namespace OC\PlatformBundle\PurgerAdvert; 

use Doctrine\ORM\EntityManager; 

class PurgerAdvert 
{ 
    private $entityManager; 

    public function __construct(EntityManager $em) { 
     $this->entityManager = $em; 
    } 

    public function purge($days) 
    { 
     $queryBuilder = $this->entityManager->createQueryBuilder(); 
     $queryBuilder->select('a')->from('OCPlatformBundle:Advert', 'a'); 

     // get the Query from the QueryBuilder here ... 
     $query = $qb->getQuery(); 
     return $result = $query->getResult(); 
    } 
} 

Попробуйте это, я думаю, он должен работать.

+0

Вы забыли '$ this-> entityManager' :-) –

+0

Я тоже испортил свой код @gp_sflover. Теперь я редактировал код, поэтому он должен быть хорошим. Спасибо за двойную проверку ... ;-) –

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