Подтвердить что ты не робот

Запрос с множественной идентификацией Symfony2 Doctrine

У меня есть массив идентификаторов, и я хотел бы получить массив сущностей из массива ID.

Я не могу использовать find.

Запрос sql выглядит так:

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

с циклом в моем массиве id.

4b9b3361

Ответ 1

Как насчет использования класса 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();

Или DQL:

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

Ответ 2

Вы также можете получить его непосредственно из репозитория:

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

Также вы можете передавать параметры в get no tin array, но в простой строке, наклеенной запятыми

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

И после этого получите его из $request

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

Ответ 3

Просто используйте:

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

Массивы поддерживаются как параметры.

Ответ 4

Если вы не хотите использовать магические методы, вместо использования этой рабочей части кода:

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

... вы можете использовать это:

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

Эффект тот же.