2017-04-09 127 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); 

     } 

}