2014-11-12 2 views
0

У меня возникла проблема с отображением настраиваемого репозитория сущностей для Entity, который расширен от другого объекта.Doctrine EntityRepository для расширенного объекта

Базовый объект:

/** 
* User entity 
* 
* @ORM\Table(name="user") 
* @ORM\Entity 
* 
* @ORM\InheritanceType("SINGLE_TABLE") 
* @ORM\DiscriminatorColumn(name="user_type", type="string") 
* @ORM\DiscriminatorMap({"user" = "User", "client" = "Client"}) 
*/ 
class User 
{ 
} 

Расширенная организация:

/** 
* Client entity 
* 
* @ORM\Entity(repositoryClass="Acme\AppBundle\Entity\ClientRepository") 
*/ 
class Client extends User 
{ 
} 

Repository:

namespace Acme\AppBundle\Entity; 

use Doctrine\ORM\EntityRepository; 

/** 
* ClientRepository 
*/ 
class ClientRepository extends EntityRepository 
{ 
    /* 
    * this method returns resultset 
    * its empty just for simplification 
    */ 
    public function getClientsWithActiveCampaign(\DateTimeInterface $date = null) {} 
} 

Вызов хранилищу:

$clients = $this->getDoctrine()->getRepository('AcmeAppBundle:Client')->getClientsWithActiveCampaign(); 

Но когда я звоню выборочную на ClientRepository я получаю:

Undefined method 'getClientsWithActiveCampaign'. The method name must start with either findBy or findOneBy! 

Таким образом, кажется, что доктрина не знает о моем пользовательском хранилище.

+0

ваш класс репозитория должен быть расширен до Doctrine \ ORM \ EntityRepository. –

+1

Вы можете показать вызов репо и голову репо (пространство имен, использование, объявление класса)? – Koalabaerchen

+0

Всего несколько дней назад у меня возникла необходимость в этом, и у меня не было никаких проблем. Должна быть какая-то глупая ошибка ... –

ответ

0

Думая об этом, диспетчер сущности отсутствует, и поэтому он не может найти репозиторий. В вашем контроллере/услуге, используйте:

$em = $em= $this->getDoctrine()->getManager(); 
$clients = $em->getRepository('AcmeAppBundle:Client')->getClientsWithActiveCampaign(); 

В $ клиенты переменная должны быть заполнены сейчас, или, по крайней мере, вы получите другую ошибку. Функция getClientsWithActiveCampaign должна запускаться.

+0

У меня было это до вашего ответа, но я забыл удалить некоторый унаследованный код, который вызывает ошибку, поэтому я считаю, что это неправильное решение. Спасибо за Ваш ответ. – Cockootec

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