Symfony 4,带实体的findAll';属性作为数组键

Symfony 4,带实体的findAll';属性作为数组键,symfony,doctrine-orm,symfony4,Symfony,Doctrine Orm,Symfony4,从symfony 4开始,当我使用findAll方法时,我得到了实体对象的关联数组,其中每个键都是实体的一个对象 我正在寻找一种很好的方法来获取关联数组,其中键是实体的特定字段的值,值是实体的对象 实际上,当我使用findAll时,我得到了以下结果: Array ( [0] => App\Entity\Foo Object ( [id:App\Entity\Foo:private] => 1 [name:App\

从symfony 4开始,当我使用findAll方法时,我得到了实体对象的关联数组,其中每个键都是实体的一个对象

我正在寻找一种很好的方法来获取关联数组,其中键是实体的特定字段的值,值是实体的对象

实际上,当我使用findAll时,我得到了以下结果:

Array
(
    [0] => App\Entity\Foo Object
        (
            [id:App\Entity\Foo:private] => 1
            [name:App\Entity\Foo:private] => nameValue1
        )

    [1] => App\Entity\Foo Object
        (
            [id:App\Entity\Foo:private] => 2
            [name:App\Entity\Foo:private] => nameValue2
        )

    [2] => App\Entity\Foo Object
        (
            [id:App\Entity\Foo:private] => 3
            [name:App\Entity\Foo:private] => nameValue3
        )
        ...
)
但是,我要的是:

Array
(
    ["nameValue1"] => App\Entity\Foo Object
        (
            [id:App\Entity\Foo:private] => 1
            [name:App\Entity\Foo:private] => nameValue1
        )

    ["nameValue2"] => App\Entity\Foo Object
        (
            [id:App\Entity\Foo:private] => 2
            [name:App\Entity\Foo:private] => nameValue2
        )

    ["nameValue3"] => App\Entity\Foo Object
        (
            [id:App\Entity\Foo:private] => 3
            [name:App\Entity\Foo:private] => nameValue3
        )
        ...
)

要获得此功能,您必须在
Foo
类的存储库中实现自己的功能,并使用QueryBuilder的
indexBy()

<?php

namespace App\Repository;
use Doctrine\ORM\EntityRepository;

class FooRepository extends EntityRepository
{

    public function findAllIndexed()
    {
        $qb = $this->createQueryBuilder('foo');
        $query = $qb->indexBy('foo', 'foo.name')->getQuery();
        return $query->getResult();
    }
}

这看起来很完美!谢谢:)但是,当我调用findAllIndexed时,我收到一个通知警告,通知是“通知:未定义的偏移量:1”,有问题吗?这似乎与findAllIndexed函数无关。请使用dump($query->getResult());在findAllIndexed()中的return语句之前,这样您就可以确切地看到这个函数返回的内容。这个通知来自我代码的另一个位置,这是我的错误!