Symfony 4,以实体的 属性 作为数组键的 findAll
Symfony 4, findAll with entity's property as array key
从 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
class 的存储库中实现您自己的功能并使用 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()
函数。
从 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
class 的存储库中实现您自己的功能并使用 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()
函数。