Разница между ObjectManager и EntityManager в Symfony2?

52

Какая разница между Doctrine\Common\Persistence\ObjectManager и Doctrine\ORM\EntityManager при использовании в пользовательском типе формы?

Я могу получить репозиторий, используя как $this->em->getRepository(), так и $this->om->getRepository().

class MyFormType extends \Symfony\Component\Form\AbstractType
{

    /**
     * @var Doctrine\ORM\EntityManager
     */
    protected $em;

    public function __construct(Doctrine\ORM\EntityManager $em)
    {
        $this->em = $em;
    }

 }

Вместо:

class MyFormType extends \Symfony\Component\Form\AbstractType
{

    /**
     * @var Doctrine\Common\Persistence\ObjectManager
     */
    protected $om;

    public function __construct(Doctrine\Common\Persistence\ObjectManager $om)
    {
        $this->om = $om;
    }

 }
Теги:
doctrine
doctrine2
symfony-forms

1 ответ

86
Лучший ответ

ObjectManager - это интерфейс, а EntityManager - его реализация ORM. Это не единственная реализация; например, DocumentManager от MongoDB ODM реализует его. ObjectManager предоставляет только общее подмножество всех его реализаций.

Если вы хотите, чтобы ваш тип формы работал с любой реализацией ObjectManager, используйте его. Таким образом, вы можете переключиться с ORM на ODM, и ваш тип будет работать одинаково. Но если вам нужно что-то конкретное, которое только EntityManager предоставляет и не планирует переключиться на ODM, используйте его вместо этого.

  • 0
    Вау, спасибо! Я пойду на ObjectManager.
  • 1
    Я думаю, что использование EntityManager сейчас устарело, или, по крайней мере, его использование для внедрения зависимостей. Но есть все еще EntityManagerInterface, если я прав, и я не знаю разницу между Objectmanager и EntityManagerInterface.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню