我正在寻找一种优雅的方式来重组由 Symfony findAll 返回的具有特定键的数组。例如,如果我有一个带有字段 id、name、color 等的实体 Animal。我想创建一个存储库方法,该方法返回一个包含所有动物的数组,并且每个动物的键都是“名称”字段,以便我可以进行查找在这个数组中。我现在的做法是迭代数组并创建一个新数组,但我想知道是否有现成的东西可以使用?
不,有一个东西内置的学说,叫做index by,我也很长时间不知道了。检查代码示例:)。
通过使用函数 getAllLocationsAssoc,它将返回由 location.id 索引的关联数组。所以数组的键将是db中对象的id。您可以像 createQueryBuilder 函数中的第二个参数一样使用它。
class LocationRepository extends EntityRepository
{
/**
* @return array
*/
public function getAllLocationsAssoc(): array
{
return $this->createQueryBuilder('location', 'location.id')
->getQuery()
->getArrayResult();
}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是在 ->from qb 函数中指定为第三个参数。
<?php
namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr\Join;
/**
* Class CityRepository
* @package AppBundle\Repository
*/
class CityRepository extends EntityRepository
{
/**
* @return array
*/
public function getAllCitiesAssoc(): array
{
return $this->_em->createQueryBuilder()
->select('c')
->from('AppBundle:City', 'c', 'c.name') // Third parameter is index-by
->getQuery()
->getResult();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5341 次 |
| 最近记录: |