Как я могу получить связанные объекты при получении результатов в виде массива (массива гидратов) через doctrine? - PullRequest
2 голосов
/ 05 февраля 2020

Я получаю данные из базы данных mysql с doctrine:

$array = $this->em->getRepository(Documents::class)->findAll();

Это вывод:

enter image description here

В моем случае я хочу получить массив напрямую, поэтому я создал функцию:

$array = $this->em->getRepository(Documents::class)->getArray();

хранилище:

   public function getArray()
    {
      return   $this->getEntityManager()
               ->getRepository(Documents::class)
               ->createQueryBuilder('e')
               ->select('e')
               ->getQuery()
               ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
      }

Массив создан, но некоторые поля отсутствуют :

enter image description here

Как я могу также получать страницы и продукты? И я хотел бы, чтобы мои данные отображались в виде даты +"timestamp": "02.12.2019"

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

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

Просто используйте функцию getArrayResult() вместо getResult(). Возвращает массив всех данных

$query = $em->createQuery("SELECT test FROM namespaceTestBundle:Test test");
$tests = $query->getArrayResult();

Query # getResult (): извлекает коллекцию объектов. Результатом является либо простая коллекция объектов (pure), либо массив, в который объекты вкладываются в строки результатов (mixed).

Query # getArrayResult (): извлекает граф массива (вложенный массив), который в значительной степени взаимозаменяемы с графом объектов, сгенерированным Query # getResult () для целей только для чтения.

Я только что проверил, что возвращает весь результат данных в виде вложенного массива:

Second Soluton в другом ответе также будет работать, но они работают по-разному:

Также посмотрите этот ответ { ссылка } И хранилище

В соответствии с этим EntityRepository class , findAll не принимать несколько аргументов.

1 голос
/ 05 февраля 2020

Вам необходимо выполнить "выборку-соединение", добавив его в список выбора:

public function getArray()
{
    return $this->getEntityManager()
        ->getRepository(Documents::class)
        ->createQueryBuilder('e')
        ->select('e', 'p')
        ->leftJoin('e.products', 'p')
        ->getQuery()
        ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
}

Дополнительная информация: https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/dql-doctrine-query-language.html#joins

...