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

в чем разница между DoctrineCommonPersistenceObjectManager и DoctrineORMEntityManager при использовании его в пользовательском типе формы?

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

class MyFormType extends SymfonyComponentFormAbstractType
{

    /**
     * @var DoctrineORMEntityManager
     */
    protected $em;

    public function __construct(DoctrineORMEntityManager $em)
    {
        $this->em = $em;
    }

 }

вместо:

class MyFormType extends SymfonyComponentFormAbstractType
{

    /**
     * @var DoctrineCommonPersistenceObjectManager
     */
    protected $om;

    public function __construct(DoctrineCommonPersistenceObjectManager $om)
    {
        $this->om = $om;
    }

 }

1 ответов


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

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