2011-11-25 6 views

Respuesta

12

Tuve el mismo problema. return get_object_vars($this) no es una buena solución porque también convierte objeto/propiedades internas de doctrina.Después de algunas investigaciones encontré esta clase: EntitySerializer que crea una matriz limpia o JSON de sus entidades y elimina elementos innecesarios. La documentación se encuentra here. Por ejemplo, utilicé el siguiente código:

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

¿Cómo instalarlo en Zend Framework 2? ¿Puedes explicarme como idiota? :) – Arvangen

+0

Este es el mejor método conocido para hacerlo. ¡Bien hecho! – manix

16

Doctrina le permite especificar un modo de hidratación al ejecutar consultas, que permiten de cambiar el tipo de datos de los resultados devueltos. En este caso, necesita Query :: HYDRATE_ARRAY. No le permite especificar esto en el método predeterminado findAll(), que se encuentra en los repositorios. Tendrá que escribir su propio DQL para ello.

Si necesita una colección de ENTIDADES como matrices:

$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); 

Si necesita una sola entidad como una matriz, por ejemplo. para un ID específico:

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

Estos métodos se definen en Query y AbstractQuery.

+4

Pero eso hace que no sea posible usarlo con el método abstracto EntityRepository-> findAll(). –

Cuestiones relacionadas