web-dev-qa-db-fra.com

demande avec plusieurs identifiants Symfony2 Doctrine

J'ai un tableau d'ID et j'aimerais obtenir un tableau d'entités de mon tableau d'ID.

Je ne peux pas utiliser find.

La requête SQL ressemble à ceci:

SELECT * FROM mytable WHERE id = 12 OR id = 10 ...

avec une boucle sur mon tableau d'identification.

37
Ajouve

Que diriez-vous d'utiliser la classe QueryBuilder:

$qb = $em->createQueryBuilder();
$qb->select('m');
$qb->from('MyEntity', 'm');
$qb->where($qb->expr()->in('m.id', array(12, 10)));

//ArrayCollection
$result = $qb->getQuery()->getResult();

Ou DQL:

$query = $em->createQuery('SELECT m FROM MyTable m WHERE m.id IN(12, 10)');
34
manix

Vous pouvez également l'obtenir directement à partir du référentiel:

$em->getRepository('YourRepo')->findById(array(1,2,3,4,5));

Vous pouvez également passer des paramètres dans get no tin array, mais dans une simple chaîne collée par des virgules

?ids=1,2,3,4,56

Et après cela, obtenez-le à partir de $ request

$em->getRepository('YourRepo')->findById(explode(',', $request->get('ids'));
98
Piotr Pasich

Utilisez simplement:

$em->getRepository('YourBundle:YourEntity')->findById(array(1, 2, 3, 4));

Les tableaux sont pris en charge en tant que paramètres.

21
flu

Dans le cas où vous ne souhaitez pas utiliser de méthodes magiques, au lieu d'utiliser ce morceau de code de travail:

$em->getRepository('AppBundle:FooEntity')->findById([1, 2, 3]);

... vous pouvez utiliser ceci:

$em->getRepository('AppBundle:FooEntity')->findBy(['id' => [1, 2, 3]]);

L'effet est le même.

19
TheFrost