2012-04-03 11 views
5

Así que en mi plantilla base, que tengo: {% render "EcsCrmBundle:Module:checkClock" %}ramita Symfony2 representación, excepción que se

Entonces creé el ModuleController.php ...

<?php 

namespace Ecs\CrmBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Ecs\CrmBundle\Entity\TimeClock; 

class ModuleController extends Controller 
{ 
    public function checkClockAction() { 
     $em = $this->getDoctrine()->getEntityManager(); 
     $user = $this->get('security.context')->getToken()->getUser(); 
     $today = time(); 
     $start = date('Y-m-d 00:00:00'); 
     $entities = $em->getRepository('EcsCrmBundle:TimeClock'); 
     $query = $entities->createQueryBuilder('tc') 
       ->select('tc.in1, tc.out1, tc.in2, tc.out2, tc.in3, tc.out3') 
       ->where('tc.noteBy = :user') 
       ->andWhere('tc.daydate >= :start') 
       ->setParameter('user', $user->getid()) 
       ->setParameter('start', $start) 
       ->setMaxResults('1') 
       ->getQuery(); 
     $entities = $query->getSingleResult(); 
     if (empty($entities)) { 
      $ents = "clocked_out"; 
      $this->get('session')->set('clockedin', 'clocked_out'); 
     } else { 
      for ($i=1; $i <= 3; $i++) { 
       if ($entities["in$i"] != NULL) { 
        $ents = "clocked_in"; 
        if ($i == 1) { 
         $this->get('session')->set('nextclock', "out$i"); 
        } else { 
         $x = $i+1; 
         $this->get('session')->set('nextClock', "out$x"); 
        } 
        if ($entities["out$i"] != NULL) { 
         $ents = "clocked_out"; 
         $x = $i+1; 
         $this->get('session')->set('nextclock', "in$x"); 
        } 
        if ($entities["out3"] != NULL) { 
         $ents = "day_done"; 
        } 
       } 
      } 
     } 
     return $this->render('EcsCrmBundle:Module:topclock.html.twig', array(
      'cstat' => $ents, 
     )); 
    } 
} 

El problema es que si no hay nada en el base de datos para el día específico para el usuario específico todavía .. me siguen dando:

An exception has been thrown during the rendering of a template ("No result was found for query although at least one row was expected.") in ::base.html.twig at line 161. 
500 Internal Server Error - Twig_Error_Runtime 
1 linked Exception: NoResultException » 

sé que tiene algo que ver con el hecho de que hay un 'resultado' de la base de datos ... pero no es tan qué Lo he logrado teniendo el if (empty($entities)) { ?? No tengo ni idea de arreglarlo ... cualquier ayuda apreciada ...

Respuesta

19

Reemplazar:

$entities = $query->getSingleResult(); 

Con

$entity = $query->getOneOrNullResult(); 

Si nos fijamos en la Doctrina \ ORM \ AbstractQuery verá que getSingleResult espera uno y solo un resultado. 0 lo hará a través de una excepción.

Miré su código un poco más de cerca y parece que realmente espera una serie de entidades. en cuyo caso use:

$entities = $query->getResult(); 
+1

¡Bonito! Estaba lidiando con un problema como este y lo resolvió para mí ... +1 para el OP y +1 para Cerad! – Justin

+0

funcionó perfectamente ... lo siento por la demora en seleccionar la respuesta ... – Johnny

Cuestiones relacionadas