getEntityManager () и getDoctrine () в Symfony2 - PullRequest
8 голосов
/ 29 ноября 2011

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 29 ноября 2011

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

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

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

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

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

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

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

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

1 голос
/ 21 февраля 2013

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

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

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

1 голос
/ 30 ноября 2011

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

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

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

...