Работа с Doctrine ORM: Пользовательский репозиторий - PullRequest
4 голосов
/ 22 августа 2011

У меня есть около 10 объектов: \ App \ Entity \ User, \ App \ Entity \ Group, ...

Для каждого из них есть свой репозиторий: \ App \ Repository \ UserRepository, ... В каждом из дюжины методов.

В доктрине для метода доступа:

$userRepository = $em->getRepository('App\Entity\User');

Однако это не удобно, потому что потеря кода завершена.

Вопрос: как организовать работу с репозиториями, не увеличивая статический код подключения? Должен ли я использовать статический метод get?

class UserRepository extends EntityRepository
{
     /**
      * @static
      * @return \App\Repository\UserRepository
      */
     public static function get ()
     {
         $em = \Registry::getInstance()->get('em');
         return $em->getRepository('App\Entity\User');
     }
}

Я наблюдал, как реализовано для работы с учением о симфонии, но есть та же проблема с дополнением кода.

Ответы [ 2 ]

4 голосов
/ 22 августа 2011

Я не думаю, что есть какие-то совершенно чистые решения для этого.

Ваши варианты сводятся в основном к двум:

  • Статические геттеры, как вы показываете. Проблема : сложный для модульного тестирования, скрывает зависимости от таких вещей, как класс Registry, требует их добавления вручную
  • Использование какой-то фабрики с геттерами. Проблема : требует ручного добавления фабричных методов

Я не думаю, что это так уж важно.В любом случае в репозиториях обычно не так много методов, так что их не так сложно запомнить (или проверить)

Однако вы можете также попробовать следующее:

/* @var My\Repository\FooRepository */
$repo = $em->getRepository('My\Repository\FooRepository');

Это должно активировать завершение на $repo в большинстве IDE.Это все еще включает в себя дополнительный ввод, хотя.

0 голосов
/ 27 ноября 2015

$ this -> _ em доступно из репозитория. Я использую это все время

...