获取symfony原则findAll以返回具有特定键类型的数组

时间:2018-08-02 15:22:02

标签: symfony doctrine

我正在寻找一种优雅的方法来重构带有特定键的Symfony findAll返回的数组。例如,如果我有一个实体Animal,其字段ID,名称,颜色等。我想创建一个存储库方法,该方法返回一个包含所有动物的数组,每个动物的键都作为“名称”字段,这样我就可以进行查找在这个数组中。我现在的操作方式是迭代数组并创建一个新数组,但我想知道是否可以使用某些现成的东西?

2 个答案:

答案 0 :(得分:2)

没有内置的东西,叫做索引依据,我也很久不知道了。检查代码示例:)。

通过使用getAllLocationsAssoc函数,它将返回由location.id索引的关联数组。因此,数组的键将是db中对象的ID。 您可以像在createQueryBuilder函数中的第二个参数一样使用它。

I/MediaRecorderJNI: setup
I/MediaRecorderJNI: setAudioSource(1)
I/MediaRecorderJNI: setAudioEncoder(1)
I/MediaRecorderJNI: setOutputFile
I/MediaRecorderJNI: prepare
I/MediaRecorderJNI: start
...
I/MediaRecorderJNI: stop
I/MediaRecorderJNI: native_reset
                    release

另一个选项是在-b中从qb函数指定为第三个参数。

class LocationRepository extends EntityRepository
{
    /**
     * @return array
     */
    public function getAllLocationsAssoc(): array
    {
        return $this->createQueryBuilder('location', 'location.id') 
            ->getQuery()
            ->getArrayResult();
    }

}

答案 1 :(得分:0)

没有什么是教义内置的。但是,如果返回的数组是实体对象的数组,则不必重复比较麻烦的数组,而可以执行以下操作来获取动物的名称:

$names = array_map(function($animal) { return $animal->getName(); }, $arrayOfAnimals);

如果返回的数组是数组数组,则可以简单地获取动物名称(以防您使用HYDRATE_ARRAY水合学说):

$names = array_column($arrayOfAnimals, 'name');

然后您可以简单地使用它来获取最终数组:

$finalArrayOfAnimals = array_combine($names, $arrayOfAnimals);