Преобразовать результат запроса в массив массивов - PullRequest
10 голосов
/ 25 ноября 2011
$shops = $this->em->getRepository('models\Shop')->findAll();

Дает мой массив с сущностями, но мне нужна сущность как массив.

Как преобразовать сущность в массив?

Ответы [ 2 ]

16 голосов
/ 26 ноября 2011

Doctrine позволяет вам указывать режим гидратации при выполнении запросов, что позволяет вам изменять тип данных возвращаемых результатов.В этом случае вам нужен Query :: HYDRATE_ARRAY.Это не позволяет вам указать это в методе findAll () по умолчанию, найденном в репозиториях.Вам нужно написать свой собственный DQL для него.

Если вам нужен набор объектов в виде массивов:

$query = $em->createQuery('SELECT u FROM User u');
$entites = $query->execute(array(), Query::HYDRATE_ARRAY);

// If you don't have parameters in the query, you can use the getResult() shortcut
$query = $em->createQuery('SELECT u FROM User u');
$entities = $query->getResult(Query::HYDRATE_ARRAY);

Если вам нужен отдельный объект в виде массива, напримердля конкретного идентификатора:

$query = $em->createQuery('SELECT u FROM User u WHERE u.id = ?1');
$query->setParameter(1, $id);
$entity = $query->getSingleResult(Query::HYDRATE_ARRAY);

Эти методы определены в Query и AbstractQuery .

12 голосов
/ 26 ноября 2011

У меня была та же проблема. return get_object_vars($this) не является хорошим решением, потому что он также преобразует внутренний объект / свойства доктрины. После некоторых исследований я нашел этот класс: EntitySerializer , который создает чистый массив или JSON изваши сущности и удаляет ненужные элементы. Документация находится здесь . Например, я использовал следующий код:

$patientProfile = $this->em->getRepository('Entities\Patientprofile')->findOneByuserid('2222222');
$entitySerializer=new Bgy\Doctrine\EntitySerializer($this->em);
$patientProfile=$entitySerializer->toArray($patientProfile);
...