Décrivez ici votre problème ou ce que vous cherchez à faire.

Bonjour à tous,

Je m'arrache les cheveux depuis un semaine :

Impossible d'obtenir un tableau de string dans mon contrôleur ni dans TWIG, rendant l'affichage et récupération du data dans chart.js impossible...

J'ai essayé toutes les méthodes pour remplir le tableau $colDepenses, à chaque fois il me ressort les indexes au lieu d'un tableau de valeurs uniquement... Deplus, il me sort une montagne de décimales après la virgule même si je fais un round ...

J'ai pourtant pris soin de requêter dans le repository avec un getScalarResult() puis de faire un Json_encode() dans le controller puis ajouter un pipe raw dans twig, rien n'y fait, il renvoie les indexes dont je n'ai pas besoin :

"[{"1":0,"2":74652.2,"3":24120.18,"4":63289.89,"5":0,"6":0,"7":39838.939999999995,"8":0,"9":73335.99,"10":11832.35,"11":46736.37,"12":22343.440000000002}]" qui n'est donc pas lisible pour chart.js dans son champ data ...

Comment faire ?

Merci d'avance

StatistiquesController.php :

<?php

namespace App\Controller;

use App\Repository\DepensesRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

#[Route('admin/')]
class StatistiquesController extends AbstractController
{

    #[Route('statistiques2', 'statistiques2')]
    public function statistiques(DepensesRepository $depensesRepository): Response
    {
        $depenses = $depensesRepository->getColonnesDepensesParAnnee(2022);

        $colDepenses = [];

        foreach ($depenses as $key => $value) {
            $colDepenses[$key] = $value;
        }

        return $this->render('statistiques/statistiques2.html.twig', [
            'colDepenses' => json_encode($colDepenses)
        ]);
    }
}

statistiques.html.twig :

{% extends 'base.html.twig' %}
{% block title %}
    Statistiques
{% endblock %}
{% block stylesheets %}
    <link rel="stylesheet" href="">
{% endblock %}
{% block body %}
    {{dump(colDepenses)}}
    <div class="wrapper-table">
        <h1>Statistiques</h1>
        <canvas id="graphDepenses" width="400" height="400"></canvas>
    </div>
{% endblock %}
{% block javascripts %}
    <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
    <script type="text/javascript">
        const graphDepenses = document.querySelector("#graphDepenses")
console.log(graphDepenses)
let graph = new Chart(graphDepenses, {
type: "bar",
data: {
labels: [
"Janv",
"Févr",
"Mars",
"Avr",
"Mai",
"Juin",
"Juil",
"Août",
"Sept",
"Oct",
"Nov",
"Déc"
],
datasets: [
{
label: "Dépenses pour l'année",
data: {{colDepenses|raw}},
backgroundColor: [
"red",
"blue",
"green",
"red",
"blue",
"green",
"red",
"blue",
"green",
"red",
"blue",
"green"
],
borderWidth: 1

}
]
}
})
    </script>
{% endblock %}

DepensesRepository.php

//Obtenir les colonnes de dépenses par mois et année pour graphiques (année spécifique)
    public function getColonnesDepensesParAnnee($selectionAnnee)
    {
        return $this->createQueryBuilder('d')
            ->select("
SUM(CASE WHEN MONTH(d.date_depense)='1' THEN d.prix_unitaire * d.quantite ELSE 0 END),
SUM(CASE WHEN MONTH(d.date_depense)='2' THEN d.prix_unitaire * d.quantite ELSE 0 END),
SUM(CASE WHEN MONTH(d.date_depense)='3' THEN d.prix_unitaire * d.quantite ELSE 0 END),
SUM(CASE WHEN MONTH(d.date_depense)='4' THEN d.prix_unitaire * d.quantite ELSE 0 END),
SUM(CASE WHEN MONTH(d.date_depense)='5' THEN d.prix_unitaire * d.quantite ELSE 0 END),
SUM(CASE WHEN MONTH(d.date_depense)='6' THEN d.prix_unitaire * d.quantite ELSE 0 END),
SUM(CASE WHEN MONTH(d.date_depense)='7' THEN d.prix_unitaire * d.quantite ELSE 0 END),
SUM(CASE WHEN MONTH(d.date_depense)='8' THEN d.prix_unitaire * d.quantite ELSE 0 END),
SUM(CASE WHEN MONTH(d.date_depense)='9' THEN d.prix_unitaire * d.quantite ELSE 0 END),
SUM(CASE WHEN MONTH(d.date_depense)='10' THEN d.prix_unitaire * d.quantite ELSE 0 END),
SUM(CASE WHEN MONTH(d.date_depense)='11' THEN d.prix_unitaire * d.quantite ELSE 0 END),
SUM(CASE WHEN MONTH(d.date_depense)='12' THEN d.prix_unitaire * d.quantite ELSE 0 END)")
            ->setParameter(':annee', $selectionAnnee)
            ->andWhere('YEAR(d.date_depense)=:annee')
            ->getQuery()->getScalarResult();
    }

Aucune réponse