getEntityManager() и getDoctrine() в Symfony2

Есть ли разница между этими двумя утверждениями:

$this->getDoctrine()->getEntityManager()->getRepository();

$this->getDoctrine()->getRepository();

Относится ли разница к какой-либо концепции ООП, которую я упускаю?


person NightOwl85    schedule 29.11.2011    source источник
comment
$this->getDoctrine()->getEntityManager() устарела в Symfony 2   -  person Alex Bitek    schedule 14.02.2014


Ответы (3)


В общем, без разницы, т.к.

$this->getDoctrine()->getRepository();

просто помощник для

$this->getDoctrine()->getEntityManager()->getRepository();

У вас может быть несколько менеджеров сущностей, и тогда будет небольшая разница в получении репозитория из одного:

$this->getDoctrine()->getRepository($entityName, $enityManagerName);
$this->getDoctrine()->getEntityManager($entityManagerName)->getRepository($entityName);

Но опять же, никакой разницы в результате вы получите.

При прочих равных я бы выбрал самый короткий.

person Elnur Abdurrakhimov    schedule 29.11.2011

Результат тот же, но если вам нужен entityManager не только для получения репозитория, может быть удобно сохранить его, а затем получить репозиторий, а также выполнить другие операции, такие как сброс:

$_em = $this->getDoctrine()->getEntityManager();
$repository = $_em->getRepository();
//...
$_em->flush();

Как было сказано ранее, если вам нужно получить только репозиторий, воспользуйтесь вторым оператором, который короче и так же легко читается, как и первый.

person Sgoettschkes    schedule 29.11.2011

Нет никакой разницы. Если вы посмотрите на исходный код AbstractManagerRegistry.php. Вы можете увидеть этот код:

public function getRepository($persistentObjectName, $persistentManagerName = null)
{
    return $this->getManager($persistentManagerName)->getRepository($persistentObjectName);
}

Как видите, когда вы вызываете getRepository(), она сначала вызывает getManager(), а затем getRepository(). Я бы предложил использовать второй, так как он дает интеллект в таких средах разработки, как PHPStorm. Надеюсь, поможет.

person Sukhrob    schedule 21.02.2013