2017-04-09 101 views
0

我有一張包含用戶的表格,每個用戶都有一個城市。 我使用ObHighchartsBundle在每個城市,以顯示用戶數量PieChart只顯示一個元素

這是我的代碼

$em = $this->getDoctrine()->getManager(); 
     $classes = $em->getRepository('MyBundle:User')->findAll(); 

     $data= array(); 
     $stat=array(); 
     foreach($classes as $class) { 

      $query = $em->createQuery("SELECT COUNT(u) FROM MyBundle:User u WHERE u.city = ?1"); 
      $query->setParameter(1, $class->getCity()); 


      if (!in_array($class->getCity(), $stat)) { 
       array_push($stat,$class->getCity(),($query->getSingleScalarResult() *1)/1); 
      } 


     } 
    array_push($data,$stat); 

我只得到在一線城市的用戶數量,所以看起來像我的foreach循環不是工作得很好..任何幫助將不勝感激!

+2

我不知道學說如何處理這一點,但它幾乎總是一個壞的選擇,在一個循環中執行SQL。如果你想得到每個城市的用戶數量,你最好用類似的東西: 'SELECT COUNT(*),city FROM User GROUP BY city' – Sebastian

回答

0

這在有人的情況下我的工作代碼需要它:

$em = $this->getDoctrine()->getManager(); 
$classes = $em->getRepository('MyBundle:User')->findAll(); 

$data= array(); 
$stat=array(); 
$hm=array(); 

$query = $em->createQuery("SELECT COUNT(u) FROM MyBundle:User u WHERE u.city = ?1"); 

foreach($classes as $class) { 

    $query->setParameter(1, $class->getCity()); 

     if (!in_array($class->getCity(), $hm)) { 

      unset($stat); 
      $stat = array(); 
      array_push($stat, $class->getCity(), (int)$query->getSingleScalarResult()); 
      array_push($hm, $class->getCity()); 
      array_push($data,$stat); 

     } 

}