Има ли разлика между тези две твърдения:
$this->getDoctrine()->getEntityManager()->getRepository();
$this->getDoctrine()->getRepository();
Разликата свързана ли е с някоя OOP концепция, която пропускам?
Има ли разлика между тези две твърдения:
$this->getDoctrine()->getEntityManager()->getRepository();
$this->getDoctrine()->getRepository();
Разликата свързана ли е с някоя OOP концепция, която пропускам?
Като цяло няма разлика, тъй като
$this->getDoctrine()->getRepository();
е само помощник за
$this->getDoctrine()->getEntityManager()->getRepository();
Можете да имате няколко мениджъра на обекти и тогава ще има малка разлика в получаването на хранилище от един:
$this->getDoctrine()->getRepository($entityName, $enityManagerName);
$this->getDoctrine()->getEntityManager($entityManagerName)->getRepository($entityName);
Но отново няма разлика в резултата, който ще получите.
При равни други условия бих избрал най-късия.
Резултатът е същият, но ако имате нужда от entityManager за нещо повече от просто получаване на хранилището, може да е удобно да го съхраните и след това да получите хранилището, както и да извършите други операции, като например промиване:
$_em = $this->getDoctrine()->getEntityManager();
$repository = $_em->getRepository();
//...
$_em->flush();
Както беше казано по-рано, ако трябва да получите само хранилището, отидете с второто изявление, което е по-кратко и лесно за четене като първото.
Няма разлика. Ако погледнете изходния код на AbstractManagerRegistry.php. Можете да видите този код:
public function getRepository($persistentObjectName, $persistentManagerName = null)
{
return $this->getManager($persistentManagerName)->getRepository($persistentObjectName);
}
Както можете да видите, когато извикате getRepository(), той първо извиква getManager() и след това getRepository(). Бих предложил да използвате втория, тъй като дава интелигентност в IDE като PHPStorm. Дано помогне.