使用 symfony 存储库上的计数查询创建图表

问题描述 投票:0回答:1

我正在 symfony 上工作,我正在尝试计算数据库中每个团队的员工人数,并将其显示在图表中。所以我在存储库中创建了这个查询:

function findNbEmp()
{
$query = $this->getEntityManager()
    ->createQuery("Select COUNT(distinct u.id) AS nbEmp, e.nomEq as equipe
                               FROM MyAppEspritBundle:User u INNER JOIN 
MyAppEspritBundle:Equipe e
                               WITH u.id_equipe=e.idEq
                               GROUP BY u.id_equipe");

return $query->getResult();


}

然后转到控制器并完成此操作:

public function chartLineAction()
{

   $em = $this->getDoctrine()->getManager();

    $nbemps = $em->getRepository('MyAppEspritBundle:User')->findNbEmp();

    var_dump($nbemps);

    $tab = array();
    $categories = array();

    foreach ($nbemps as $nb) {
      //  var_dump($user['nbEmp']);
        array_push($tab,$nb['nbEmp'] );
      array_push($categories, $nb['equipe']);
    }


    // Chart
   $series = array(
        array("name" => "Nb employés", "data" => array($tab))
   );

    $ob = new Highchart();
    $ob->chart->renderTo('linechart');        //  #id du div où afficher le graphe
    $ob->title->text('Nombre d employés par équipe');
    $ob->xAxis->title(array('text' => "Equipe"));
    $ob->yAxis->title(array('text' => "Nb Employés"));
    $ob->xAxis->categories($categories);
    $ob->series($series);

    return $this->render('MyAppEspritBundle:Gerant:AccueilGerant.html.twig',
        array(
        'chart' => $ob
    ));
}

问题是当我将 $nb['nbEmp'] 放入 array_push($tab, $nb['nbEmp']) 时,图表就消失了,所以当我只让 ($tab, $nb) 时,至少我可以看到我在数据库中创建和获取的组的名称。 顺便说一句,除了第一个 array_push (因为 nbEmp)之外,捆绑包中的所有内容都工作正常

即使我使用了 var_dump,它也显示了我想在图表上设置但无法设置的结果:

在此输入图片描述

我想知道我的代码中缺少什么以便它可以在图中正确读取 nbEmp 。 你们能帮我吗?如果其他解决方案比我想要实现的解决方案更有效,我也愿意接受。请问,我需要知道我应该在第一个 array_push 中放入什么?

提前致谢。

php symfony highcharts count repository
1个回答
1
投票
public function chartLineAction()
{

   $em = $this->getDoctrine()->getManager();
    // $users is not the best name for this result 
    $users = $em->getRepository('MyAppEspritBundle:User')->findNbEmp();

  //  var_dump($users);

    $tab = array();
    $categories = array();

    foreach ($users as $user) {
      $tab[] = (int)$user['nbEmp']
    }


    // Chart
   $series = array(
        array("name" => "Nb employés", "data" => array($tab))
   );

    $ob = new Highchart();
    $ob->chart->renderTo('linechart');       
    $ob->title->text('Nombre d employés par équipe');
    $ob->xAxis->title(array('text' => "Equipe"));
    $ob->yAxis->title(array('text' => "Nb Employés"));
   // $ob->xAxis->categories($categories);
    $ob->series($tab);

    return $this->render('MyAppEspritBundle:Gerant:AccueilGerant.html.twig',
        array(
        'chart' => $ob
    ));
}

尝试上面的代码,它应该会显示结果,但您可能想显示“装备”ID(或名称)以及员工数量。为此,您需要像这样修改您的查询:

function findNbEmp()
{
$query = $this->getEntityManager()
    ->createQuery("Select COUNT(distinct u.id) AS nbEmp, u.id_equipe as id_equipe
                               FROM MyAppEspritBundle:User u
                               GROUP BY u.id_equipe");

return $query->getResult();
}

然后用

$categories
填充您的
$users['id_equipe']
并取消注释我评论的行:

// $ob->xAxis->categories($categories);

尝试我建议的第一部分,如果你得到一个图表,你会更舒服地修改和使用不同的选项。

© www.soinside.com 2019 - 2024. All rights reserved.