Задать вопрос

Работа с Doctrine ORM: Пользовательские репозитории?

У меня есть около 10 сущностей: \App\Entity\User, \App\Entity\Group,…


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


В Доктрине для доступа к ним используется метод:
$userRepository = $em->getRepository('App\Entity\User');



Однако это не удобно, т.к. пропадает code completion.


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

Стоит ли использовать статический 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');
    }
}



Смотрел как реализована работа с доктриной в симфонии, но там та же проблема с code completion.
  • Вопрос задан
  • 3223 просмотра
Подписаться 4 Оценить Комментировать
Ответ пользователя kastigar К ответам на вопрос (4)
@kastigar
Не вижу ничего плохого в статическом get методе. ИМХО, в вашем случае — это самый лучший вариант:
— по производительности не должно уступать или сильно уступать прямому доступу через EM
— не нужно переживать о захламлении кода
— доступность метода из любых скриптов/классов

Да, PHP такой язык, code completion очень часто не доступен. Лично я часто использовал instanceof как временное решение. Т.е. как только нужен completion, я добавляю instanceof. После того как ф-ция дописана, я его убираю. Не самое идеальное решение, но в большинстве случаев хватало. Для репозиториев доктрины делал бы с помощью статического get метода.
Ответ написан
Комментировать