web-dev-qa-db-ja.com

複数のIDを持つリクエストSymfony2 Doctrine

IDの配列があり、ID配列からエンティティ配列を取得したいです。

Findを使用できません。

SQL要求は次のようになります。

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

私のID配列のループで。

37
Ajouve

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)');
34
manix

リポジトリから直接取得することもできます:

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

また、tin配列を取得せずに、コンマで接着された単純な文字列でパラメーターを渡すことができます

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

その後、$ requestから取得します

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

単に使用します:

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

配列はパラメーターとしてサポートされています。

21
flu

この作業コードを使用する代わりに、マジックメソッドを使用したくない場合:

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

...これを使用できます:

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

効果は同じです。

19
TheFrost