2017-06-07 1 views
0

Voici le var_dump pour ma requête dans mon code:Essayer de mettre requête DQL dans Highcharts tableau, retourne 0 malgré réseau étant peuplée

array (size=2) 
    0 => 
    array (size=4) 
    0 => 
    array (size=1) 
     'barbell_curl_1_weight' => int 15 
    1 => 
    array (size=1) 
     'barbell_curl_1_weight' => int 20 
    2 => 
    array (size=1) 
     'barbell_curl_1_weight' => int 25 
    3 => 
    array (size=1) 
     'barbell_curl_1_weight' => int 20 

Voici ma question:

/** 
* @param User $user 
* @param String $col 
* @return array 
*/ 
public function getStatsForStatsByDQL(User $user, String $col) 
{ 

    $parameters = (array('user' => $user, 
    )); 
    $em2 = $this->getDoctrine()->getManager() 
     ->getRepository('AppBundle:ExerciseStats') 
     ->createQueryBuilder('g') 
     ->setParameters($parameters) 
     ->where('g.user = :user') 
     ->select('g.'. $col) 
     ->setMaxResults(12) 
     ->join('g.user', 'user') 
     ->orderBy('g.'. 'timestamp','ASC') 
     ->getQuery()->getResult(Query::HYDRATE_ARRAY); 
    return $em2; 
    } 

Comme vous le voyez à partir de var_dump, je reçois les données dont j'ai besoin. Voici la fonction Highcharts il va dans:

/** 
* @return \Symfony\Component\HttpFoundation\Response 
* @Route ("user/stats", name="user_stats") 
*/ 
public function chartAction() 
{ 
    $user = $this->getUser(); 
    // Chart 
    $query = $this->getStatsForStatsByDQL($user, 
ExerciseConsts::BARBELL_CURL_1_WEIGHT); 


    $series = array($query, array("name" => "weight", "data" => 
$query)); 

    $ob = new Highchart(); 
    $ob->chart->renderTo('linechart'); 
    $ob->title->text('Barbell Curl Weight'); 
    $ob->xAxis->title(array('text' => "Workouts")); 
    $ob->yAxis->title(array('text' => "Weight")); 
    $ob->series($series); 

    return $this->render('user/stats.html.twig', array(
     'chart' => $ob 
    )); 
} 

Donc tout ce que je vais revenir est 0. Lorsque vous utilisez des points d'arrêt dans xdebug, je reviens ceci:

1 = {array} [2] 
    name = "weight" 
    data = {array} [4] 
    0 = {array} [1] 
    barbell_curl_1_weight = 15 
    1 = {array} [1] 
    barbell_curl_1_weight = 20 
    2 = {array} [1] 
    barbell_curl_1_weight = 25 
    3 = {array} [1] 
    barbell_curl_1_weight = 20 

Comment puis-je extraire les poids et l'obtenir dans le graphique Highchart? La documentation pour le paquet Highcharts fait complètement défaut à cet égard. Faites-moi savoir si quelqu'un a des indices. Merci!

Voici le var_dump de json_encode ($ series, JSON_NUMERIC_CHECK). Peut-être que cela vous aidera:

chaîne '[[{"barbell_curl_1_weight": 15}, {"barbell_curl_1_weight": 20}, {"barbell_curl_1_weight": 25}, {"barbell_curl_1_weight": 20}], {"name" : "poids", "données": [{"barbell_curl_1_weight": 15}, {"barbell_curl_1_weight": 20}, {"barbell_curl_1_weight": 25}, {"barbell_curl_1_weight": 20}]}] '(longueur = 266)

+0

vous pouvez utiliser '$ ob = json_encode ($ ob, JSON_NUMERIC_CHECK);' et ensuite passer à la série –

+0

Je ne suis pas tout à fait suivi. J'ai déjà $ ob = new Highchart(). Comment cela fonctionnerait-il exactement? Si vous pouviez clarifier un peu, ce serait génial. Merci pour votre temps. –

+1

mon erreur, il devrait être '$ series = json_encode ($ series, JSON_NUMERIC_CHECK);' –

Répondre

0

J'ai trouvé la solution. Comme nous avons affaire à un tableau multidimensionnel, Highcharts ne fore vers le bas au-delà du premier tableau, qui renvoie 0. Voici mon itération pour renvoyer les valeurs de chaque tableau:

$temp = array(); 
    foreach($array as $k=>$v){ 
     if(is_array($v)){ 
      foreach($v as $key=>$value){ 
       $temp[] = $value; 
      } 
     } 
    } 

Alors maintenant, je dois juste remplacer $ temp par $ query et voila ', le graphique est rendu avec toutes les valeurs correctement.