Подсказка типа возвращаемого объекта в репозитории Doctrine2

У меня есть класс CustomRepository, который расширяет класс Doctrine\ORM\EntityRepository. Этот репозиторий связан со многими различными объектами. В репозитории есть метод, который возвращает связанный объект.

class CustomRepository extends \Doctrine\ORM\EntityRepository
{
    function getEntity() { ... } // returns an instance of associated entity
}

/**
 * @ORM\Entity(repositoryClass="CustomRepository")
 */
class EntityClass1 { ... }    
/**
 * @ORM\Entity(repositoryClass="CustomRepository")
 */
class EntityClass2 { ... }

$repo1 = $entityManager->getRepository('Entity1');
$entity1 = $repo1->getEntity(); // will return an instance of EntityClass1

$repo2 = $entityManager->getRepository('Entity2');
$entity2 = $repo1->getEntity(); // will return an instance of EntityClass2

Я использую плагин Symfony 2, который правильно определяет класс объектов, возвращаемых унаследованными методами, как find.
Есть ли способ сообщить плагину, что метод возвращает связанный объект?


person Vasily    schedule 30.10.2015    source источник


Ответы (1)


Вы можете использовать что-то вроде этого:

/**
 * MyEntity repository.
 *
 * @method MyEntity[] find
 */
person COil    schedule 30.10.2015
comment
Прошу прощения за отсутствие подробностей. Я добавил пример кода, чтобы примерно описать, что я прошу. - person Vasily; 30.10.2015
comment
Итак, вы хотите ввести подсказку о методах вашего класса репозитория, верно? Так, например, $entity2 известен как относящийся к типу Entity2. - person COil; 30.10.2015
comment
Да, но сам метод возвращает сущности разных классов (EntityClass1, EntityClass2 в примере). Но таких сущностей в проекте очень много (я использую CustomRepository вместо EntityRepository для многих сущностей), поэтому один и тот же метод может возвращать сущности разных типов... - person Vasily; 31.10.2015
comment
Но использование одного и того же репозитория для разных сущностей не является хорошим методом, лучше создать BaseRepository и создать Entity1Repository и Entity2Repository, которые расширяют этот новый. Затем добавьте аннотации @method, как предложено в моем ответе, в оба новых репозитория Entity. - person COil; 03.11.2015