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

Problema con una serie de consultas de Doctrine

24 de marzo de 2015

Hola tengo este problema: para obtener el id de una clase me da problemas y dice:

Error: Call to a member function getId() on a non-object

Quisiera que me ayudaran en esto a ver que solución le puedo dar. Mis saludos y esperaré por su respuesta y ayuda:

public function mostrarEvaluacionCompletaAction($id)
{
    $em = $this->getDoctrine()->getManager();
 
    $consulta = $em->getRepository('EvaluacionBundle:Evaluacion')->findBy(array('proyecto'=>$id));
    $consulta1 = $em->getRepository('EvaluacionBundle:CriterioGeneral')->findBy(array('evaluacion'=> $consulta->getId()));
    $consulta2 = $em->getRepository('EvaluacionBundle:SubCriterio')->findBy(array('criterioG'=>$consulta1->getId()));
    $consulta3 = $em->getRepository('EvaluacionBundle:Puntuacion')->findBy(array('subCriterio'=>$consulta2->getId()));
 
    $p = $em->getRepository('EvaluacionBundle:Puntuacion')->findById($consulta3->getId());
 
    return $this->render('EvaluacionBundle:Default:Evaluacion.html.twig', array(
       //'evaluacion'=>$ev,
        'criteriogeneral'=>$consulta1,
        'subcriterio'=>$consulta2,
        'puntuacion'=>$p,
        'id'=> $id
    ));
}

Respuestas

#1

Como en el código que muestras utilizas el ->getId() en varios sitios y como el error no da más detalles, nos tendrías que decir exactamente en qué línea se está produciendo el error.

En cualquier caso, parece claro que el error se produce porque alguna de las variables $consulta es null y por tanto, no es un objeto sobre el que se pueda ejecutar el método getId().

Deberías mirar una a una el resultado devuelto por cada consulta. Si usas una versión moderna de Symfony, puedes usar la función dump() para mostrar el contenido de la variable que te devuelve Doctrine. Si usas una versión antigua, recuerda que al hacer var_dump() sobre la consulta se te va a colgar el navegador, así que usa en su lugar la función que te da Doctrine:

// Symfony moderno
dump($consulta);
 
// función PHP que colgará tu navegador
var_dump($consulta);
 
// utilidad de Doctrine para versiones viejas de Symfony
 \Doctrine\Common\Util\Debug::dump($consulta);

@javiereguiluz

24 marzo 2015, 21:21