Doctrine 2查询构建器和索引

Joh*_*ohn 15 doctrine-orm

是否可以在doctrine 2查询构建器中使用index by,如果是,那么正确的语法是什么?

小智 42

从2.2开始,您现在可以在from语句中包含INDEX BY.如果要添加from子句,

$qb->from($class, $alias, $indexBy);
Run Code Online (Sandbox Code Playgroud)

如果您已经有要替换的from子句,则可以将其替换为:

$qb->add('from', new Expr\From($class, $alias, $indexBy), false);
Run Code Online (Sandbox Code Playgroud)

还有一个打开拉取请求,将它添加到Repository的createQueryBuilder函数中,所以希望很快就会添加它.


ken*_*ken 6

有关更新.你可以做这样的事情.

$qb = $entityManager->createQueryBuilder();
$qb->from($repository->getClassName(), 'a', 'a.id');
$qb->select(a);

$result = new ArrayCollection($qb->getQuery()->getResult());
Run Code Online (Sandbox Code Playgroud)

因此,数组集合将包含正确的索引元素.


小智 4

这是使用 querybuilder 时的一种解决方案,使用手动注入索引 by 子句 -

(do you querybuilder statement)
$q  = $q->getQuery()->setDQL(str_replace('WHERE', 'INDEX BY yourIndexValue WHERE', $q->getDQL()));
Run Code Online (Sandbox Code Playgroud)

这似乎对我有用......