Symfony 4, 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
        )
        ...
)
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
3
0
2 898
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы получить эту функциональность, вы должны реализовать свою собственную функцию в репозитории класса Foo и использовать QueryBuilder's 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().

Это кажется идеальным! спасибо :) однако, когда я вызываю findAllIndexed, я получаю предупреждение Notice: Undefined offset: 1, это проблематично?

matthieu lopez 16.09.2018 20:45

Похоже, это не связано с функцией findAllIndexed. Пожалуйста, используйте дамп ($ query-> getResult ()); перед оператором return внутри findAllIndexed (), чтобы вы могли точно видеть, что возвращает эта функция.

iiirxs 16.09.2018 20:48

Это уведомление было из другого места моего кода, это было моей проблемой!

matthieu lopez 16.09.2018 20:53

Другие вопросы по теме