IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Tableau de données croisées


Sujet :

Symfony PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Par défaut Tableau de données croisées
    Bonjour,

    Je suis nouveau sur Symfony et je ne trouve pas de solutions propres à mon problème (simple je pense ...)

    Comment faire pour afficher un tableau avec des données croisées où il peut y avoir des entités null. Pour mieux comprendre , j'ai fait un petit exemple (cf pj).

    Dans l'exemple, on trouve 3 entités : student (les étudiants) , homework ( les devoirs maison) et note (une note pour un étudiant pour un devoir maison).

    Dans le controller NoteController, j'ai fait une route /list pour afficher pour chaque devoir la note de chaque étudiant. Sachant que un étudiant n'a pas forcément de note pour un devoir.


    Je veux simplement avoir un twig du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {% for homework in homeworks %}
    <tr><td>{{homework.sujet }}</td>
        {% for student in students%}
            <td>{{ la note du student si il en a une  }}</td>
        {% endfor %}
    </tr>
    {% endfor %}
    Malgré la faible complexité de l'énoncé , je n'ai pas trouvé de réponses clair.
    J'espère que l'un d'entre vous peut m'aider .

    Akro
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé
    Avatar de fenrir0680
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Billets dans le blog
    2
    Par défaut
    Salut,

    Vu les relations entre tes entités, tes notes sont reliées à tes homeworks.
    Du coup dans ton controller tu récupère directement tes notes lorsque tu récupère tes homeworks et tu simplifie légèrement ton code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
    	 * @Route("/list", name="exemple_note_list")
    	 */
    	public function list(Request $request,ObjectManager $manager): Response {
     
    		$homeworks = $manager->getRepository(Homework::class)->findAll();
    		$students = $manager->getRepository(Student::class)->findAll();
     
    		return $this->render('exemple/note/list.html.twig', [
    			'homeworks' => $homeworks,
    			'students' => $students,
    		]);
    	}
    et dans ta vue tu fais un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    {% block body %}
        <h1>Note index</h1>
     
        <table class="table">
            <thead>
            <tr>
                <th>Homework</th>
                {% for student in students %}
                    <th>{{ student.nom }} </th>
                {% endfor %}
            </tr>
            </thead>
            <tbody>
            {% for homework in homeworks %}
                <tr>
                    <td>{{ homework.sujet }}</td>
                    {% for note in homework.notes %}
                         {% if note.note %}
                     <td>{{ note.note }}</td>
                         {% else %}
                     <td>Pas de note</td>
                         {% endif %}
                    {% endfor %}
                </tr>
            {% else %}
                <tr>
                    <td colspan="2">no records found</td>
                </tr>
            {% endfor %}
            </tbody>
        </table>
     
        <a href="{{ path('exemple_note_new') }}">Create new</a>
    {% endblock %}
    Regarde bien ta première boucle {% for homework in homeworks %}, il y a une erreur.
    Une boucle "for" "else" "endfor", ça ne marche pas. Regarde comment j'ai construit la mienne.
    Regarde bien la doc sur le site de twig, elle est pas mal faite.

    A+

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Par défaut
    Merci pour ta réponse.

    Je comprends bien ta proposition mais dans mon cas, elle ne fonctionne pas . En effet, en faisant homework.notes, on récupère les notes du homework mais en aucun cas ces notes sont triés par student. Dans le tableau on n'affichera donc pas la note correspondant à l'élève en colonne.

    akro

  4. #4
    Membre éclairé
    Avatar de fenrir0680
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 49
    Billets dans le blog
    2
    Par défaut
    Yes j'avais pas vue

    Je me demande si le découpage de tes entités est bon?
    Est-ce qu'on te l'a imposé, ou c'est toi qui la réalisé?

    Je ne vois pas le lien entre tes étudiants et leurs devoirs.
    Est-ce que tous les étudiants possèdent des devoirs?
    Est-ce que tous les devoirs sont les mêmes pour tous les étudiants?
    Est-ce que quelque soit le nombres d'étudiants, ils ont tous le/les même/s devoir/s?
    Est-ce qu'une note peut-être attribuée à plusieurs étudiants?

    Actuellement
    un étudiant ne sais pas qu'il possède de devoir, ni de note
    Une ou plusieurs note savent qu'elles appartiennent à un devoir et un étudiant. => Relation ManyToOne
    Un devoir sais qu'il possède des notes. => Relation OneToMany / Est-ce utile? Est-ce qu'un devoir doit savoir qu'il possède des notes?

    De ce que j'ai compris,
    Un étudiant possède un ou plusieurs devoirs. => Relation OneToMany coté étudiant vers devoir
    Un devoir possède plusieurs étudiant. => Relation ManyToOne coté devoir vers étudiant
    Un étudiant possède une ou plusieurs notes relié à un devoir (1 note / 1 devoir) | => Relation OneToMany coté étudiant vers note
    | => Relation ManyToOne coté note vers devoir

    Du coups, si je ne me plante pas, en récupérant tes étudiants, tu récupères aussi les devoir et les notes.

    Si on t'a imposé la découpe des entités, alors un truc du genre devrait fonctionner, mais niveau perf c'est pas top:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    {% for student in students %}
            {% for homework in homeworks %}
                    {% for note in notes %}
                             {% if note.student == student and note.homework == homework %}
                             {% endif %}
                    {% endfor %} 
            {% endfor %} 
    {% endfor %}

  5. #5
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Par défaut
    Salut,

    Merci pour ta réponse.

    J'ai déjà mis en pratique ta solution, qui fonctionne mais qui effectivement n'est pas optimale. Sachant que je te founi juste un exemple mais que la vraie fonction est bcp plus lourde.
    Je peux modifier la structure ou même ajouter de nouvelles entités si besoin.
    Cela m'étonne que symfony n'inclue pas un Repo de ce style , avec une requete left join et la gestion des objets null.

    Akro

  6. #6
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    Cela m'étonne que symfony n'inclue pas un Repo de ce style , avec une requête left join et la gestion des objets null.
    Tu peux très bien faire des left join (et donc d'exclure les relations nulles)

    Avec Doctrine, on peut tout faire en SQL, pas de limite.

    sinon faut absolument avoir un modèle relationnelle en béton (avant de faire quoi que se soit), c'est la base.
    donc tu peux commencer par nous le montrer....

Discussions similaires

  1. Tableau de données croisées
    Par jubourbon dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/12/2008, 07h57
  2. exporter un tableau de donnée vers un document word
    Par demerzel0 dans le forum Access
    Réponses: 2
    Dernier message: 04/11/2005, 11h57
  3. Filtrer un tableau de données
    Par Yux dans le forum Langage
    Réponses: 12
    Dernier message: 13/10/2005, 22h21
  4. Formaliser la requête (données croisées)
    Par JeAn-PhI dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/06/2005, 08h42
  5. [Collections] Transformer un tableau de données en une chaîne
    Par NATHW dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 03/06/2004, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo