Symfony 4,将实体的属性作为数组键的findAll

时间:2018-09-16 18:04:53

标签: symfony doctrine-orm symfony4

在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
        )
        ...
)

1 个答案:

答案 0 :(得分:4)

要获得此功能,您必须在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();
    }
}

现在,您只需调用$repository->findAllIndexed()而不是$repository->findAll()函数。