2

Я понимаю выгоду или хранилище шаблона, но я просто не могу понять, в Symfony3 Доктрине есть Doctrine\ORM\EntityManager и \Doctrine\ORM\EntityRepositorySymfony Доктрина диспетчер объектов и репозиторий

  1. Какие различия между этими двумя?
  2. Следует ли вводить репозиторий в контроллер или диспетчер объектов?

    Редактировать Правильный вопрос должен быть: Каким образом можно получить доступ к репозиторию с контроллера?

    • Следует ли вводить репозиторий в контроллер как услугу?
    • Следует ли вводить репозиторий в другую службу в качестве услуги?
  3. Должен ли администратор сущности содержать любой запрос вообще?
    Редактировать Правильный вопрос должен быть: должен ли сервис содержать запрос вообще? Какой @MateuszSip уже объяснил, это можно сделать, вставив Entity Manager

  4. Если в будет помещена пользовательская функция, например, репозиторий или услуги? (Где manager это хранилище и там есть какая-то логика в определении available manager)

  5. Как насчет более общей функции, как findAllManager, он должен быть в хранилище или объекта менеджера?

В настоящее время я использую Symfony3. Большое спасибо

Приветствия,

Редактировать Разговор с @MateuszSip (благодаря мату), я решил сделать мой вопрос яснее на примере ниже.Обратите внимание, что ниже код не представляющие реальную проблему

контроллер

Class ManagementController 
{ 
    public function assignManager($projectType) 
    { 
     // Grabbing a service 
     $s = $this->get('mycompany_management_management_service') 

     $managers = $s->findAvailableManagers(); 
     $managers = $s->checkCapability($managers, $projectType); 

     return $managers 
    } 
} 

хранилище

class ManagerRepository extends \Doctrine\ORM\EntityRepository 
{ 
    public function findAvailableManagers() 
    { 
     ... 
     return $managers 
    } 

    public function checkCapability($managers, $type) 
    { 
     ... 
     return $capableManagers 
    } 
} 

услуги

class ManagementService 
{ 
    ... I am not sure what should be here. 
} 

ответ

2
  1. EntityManager используется для управления доктрины, связанные с объектами, так:
    • вы можете сохранить объект сущности (это теперь управляется доктриной, и готов спасти)
    • вы можете удалить объект сущности (так он будет удален позже)
    • можно промывать, и его будут запускать отложенные операции
    • вы можете получить хранилище (чтобы получить объекты, которые вы будете нуждаться) или использовать общий API для получения объекта по первичному ключу и т.д.

Это класскоторый управляет состоянием объектов и их отношением к базе данных.

Репозиторий - это шаблон, который обеспечивает доступ к услугам.

  1. Если ваше приложение является сложным, вы должны ввести отдельную услугу (ы) к контроллеру. Таким образом, есть сервис UserSaver (в качестве примера), который использует entityManager для создания/обновления пользователя и UserFinder (или что-то хорошо названное) с использованием UserRepository, который отвечает за выбор пользователя по определенным критериям.

  2. Вы можете создать запрос с помощью диспетчера сущностей, но сам сам не может содержать запросы.

  3. На мой взгляд, определите метод внутри службы и соответствующий метод в вашем UserRepository. В этот момент все, что вы хотите, должно быть извлечено из базы данных, но это может измениться позже.

  4. В репозитории. Методы вроде: findByRole (role = manager), findIsActive, findOneBySecurityNumber зависит от репозитория.

+0

Спасибо за ответ. Для вашего пункта 4. Как может репозиторий доступа к сервису? Это через инъекцию? или это через '-> entityManager-> getRepository'? –

+0

Вы можете определить свой репозиторий как услугу и ввести его в свою службу. –

+0

Если я определяю свой репозиторий как услугу, зачем мне вводить его в другой сервис? Должен ли я просто вводить репозиторий в контроллер в качестве службы? Кроме того, если я использую инъекцию, что тогда означает '-> entityManager-> getRepository'? Спасибо и извините, если слишком много вопросов. –

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