2012-04-03 14 views
5

Więc w moim szablonu bazowego, mam: {% render "EcsCrmBundle:Module:checkClock" %}Symfony2 gałązka render, wyjątek rzucony

Potem stworzył 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, 
     )); 
    } 
} 

Problem jest, jeśli w nic bazy danych dla określonego dnia o określonej jeszcze użytkownikiem .. ciśgle:

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 » 

wiem, że to ma coś wspólnego z faktem, że ma „wynik” z bazy danych ... ale nie jest to, że co osiągnąłem dzięki if (empty($entities)) {? Nie mam pojęcia, żeby go naprawić ... jakiejkolwiek pomocy ceniona ...

Odpowiedz

19

Wymienić:

$entities = $query->getSingleResult(); 

Z

$entity = $query->getOneOrNullResult(); 

Jeśli spojrzeć w doktrynie \ ORM \ AbstractQuery widać, że getSingleResult oczekuje jednego i tylko jednego wyniku. 0 spowoduje wyjątek.

Spojrzałem na twój kod nieco bliżej i wygląda na to, że faktycznie spodziewasz się wielu jednostek. w takim przypadku użyj:

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

Nice! Miałem do czynienia z podobnym problemem i rozwiązałeś go dla mnie .. +1 dla OP i +1 dla Cerada! – Justin

+0

działało idealnie .. przepraszam za opóźnienie w wyborze odpowiedzi .. – Johnny

Powiązane problemy