Запрос с множественной идентификацией Symfony2 Doctrine
У меня есть массив идентификаторов, и я хотел бы получить массив сущностей из массива ID.
Я не могу использовать find.
Запрос sql выглядит так:
SELECT * FROM mytable WHERE id = 12 OR id = 10 ...
с циклом в моем массиве id.
Ответы
Ответ 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]]);
Эффект тот же.