2012-04-23 2 views
51

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

Я могу получить репозиторий, используя как $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; 
    } 

} 

ответ

87

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

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

+0

Ничего себе, спасибо! Я пойду для ObjectManager. – gremo

+0

Я думаю, что использование EntityManager теперь устарело или, по крайней мере, его использование в инъекции зависимостей. Но все еще есть EntityManagerInterface, если я прав, и я не знаю разницы между ObjectManager и EntityManagerInterface. –