Symfony Can';t更改findAll()和findBy()函数的INDEXBY

Symfony Can';t更改findAll()和findBy()函数的INDEXBY,symfony,doctrine-orm,doctrine,Symfony,Doctrine Orm,Doctrine,使用Doctrine和Symfony 5,我希望使用findAll()和findBy()函数更改查询的索引。我希望结果表的键只是id // Current result [ 0 => Post { 'id' => 5, 'name' => 'Test 5', }, 1 => Post { 'id' => 6, 'name' => 'Test 6', }, ] //

使用Doctrine和Symfony 5,我希望使用
findAll()
findBy()
函数更改查询的索引。我希望结果表的键只是id

// Current result
[
    0 => Post {
        'id' => 5,
        'name' => 'Test 5',
    },
    1 => Post {
        'id' => 6,
        'name' => 'Test 6',
    },
]
// Desired result :
[
    5 => Post {
        'id' => 5,
        'name' => 'Test 5',
    },
    6 => Post {
        'id' => 6,
        'name' => 'Test 6',
    },
]
我知道我可以使用
createQueryBuilder('post','post.id')
,但在这种情况下,我会丢失
fetch=EAGER
,因为我自己进行查询


也许唯一的解决办法是使用foreach()来更改每个
findAll()
findBy()
请求的键,但我发现它很重。

您可以更改
findBy
方法或
findAll
方法:

创建一个foreach
($results as$result)
,如下所示:

$newResult = [];
$results = $repo->findAll();
foreach ($results as $result) {
    $newResult[$result->getId()] = $result;
}

您正在将视图详细信息泄漏到模型中。一个红色的灯泡应该开始闪烁,表明你做错了。是的,正如我在文章末尾指出的,我已经考虑过这个解决方案。没有比对每个
findBy
findAll
执行
foreach()
更好的解决方案了?您可以将findBy或findAll附加到存储库中。我认为没有更好的解决办法。