Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Serialize entity con relacion ManyToMany

4 de mayo de 2015

Hola,

Necesito obtener todos los resultados de una tabla en JSON para mostrarlos en un datagrid con JavaScript, por lo que en mi controlador HotelsController tengo un método listAction como el siguiente:

/**
 * Listado de hoteles
 *
 * @Route("/list", name="hotels_list")
 * @Method("GET")
 */
public function listAction()
{
    $encoder = new JsonEncoder();
    $normalizer = new GetSetMethodNormalizer();
 
    $serializer = new Serializer(array($normalizer), array($encoder));
 
    $em = $this->getDoctrine()->getManager();
    $hotels = $em->getRepository('AppBundle:Hotel')->findAll();
 
    return new Response($serializer->serialize($hotels, 'json'));
}

¿Que pasa si lo hago así?, pues que obtengo un error: A circular reference has been detected (configured limit: 1), así que mirando en la documentación encontré esto pero usando setCircularReferenceHandler tal y como aparece ahí no me funciona, me da otro error en este caso:

Warning: ReflectionProperty::getValue() expects exactly 1 parameter, 0 given

Lo he solucionado con:

$normalizer->setIgnoredAttributes(array('tags', 'laundry'));

Pero claro, no puedo acceder a esas propiedades. En este caso tags si es ManyToMany (unidireccional) pero laundry es ManyToOne (entidad Laundry) pero una de sus propiedades si es ManyToMany (también unidireccional). ¿Como podría hacerlo?. Es cierto que ahora mismo funciona con el setIgnoredAttributes y no necesito acceder a las propiedades de tags y laundry, pero me gustaría hacerlo bien y de paso aprender como es la forma correcta.

Estoy usando Symfony 2.6.6, por si sirve de ayuda.

Gracias.

Un saludo.


Respuestas

#1

Hola, tengo el mismo problema que tú. ¿Encontraste solución?

Gracias, un saludo.

@diverr

18 noviembre 2016, 1:31