7
Jak uzyskać dostęp do EntityManager lub klasy repozytoriów wewnątrz obiektu DataFixture w celu utworzenia zapytania?Jak wykonać zapytanie doktrynowe w klasie DataFixture?
Jak uzyskać dostęp do EntityManager lub klasy repozytoriów wewnątrz obiektu DataFixture w celu utworzenia zapytania?Jak wykonać zapytanie doktrynowe w klasie DataFixture?
Jeśli Twoja oprawa wdraża ContainerAwareInterface
, masz pełny dostęp do kontenera i możesz tam uzyskać jednego z twoich menedżerów jednostek.
po uzyskaniu menedżera encji można uzyskać repozytorium lub utworzyć zapytanie za pomocą DQL lub querybuildera.
namespace Vendor\YourBundleBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class LoadCharacterData implements FixtureInterface, ContainerAwareInterface
{
private $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
public function load()
{
$em = $this->container->get('doctrine')->getEntityManager('default');
// example using DQL
$query = $em->createQuery('SELECT u FROM YourBundle\Entity\User u WHERE u.name = your_name');
$users = $query->getResult();
// example query using repository
$repository = $em->getRepository('YourBundle:User');
$entities = $repository->findBy(array('name' => 'your_name'));
// example using queryBuilder
$qb = $repository->createQueryBuilder('u');
$qb
->where('u.name = :name')
->setParameter('name', 'your_name')
->orderBy('u.name');
$users = $qb->getQuery()->getResult();
// ...
}
Dla przyszłego odniesienia, 'EntityManager' (który implementuje' ObjectManager') zostaje przekazany jako pierwszy argument w ładowaniu metody. Nie musisz implementować 'ContainerAwareInterface' –
' getEntityManager() 'jest przestarzałe od Symfony 2.1. Zamiast tego użyj 'getManager()'. – marcv