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 :

Tri par défaut dans une relation oneToMany [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Par défaut Tri par défaut dans une relation oneToMany
    Bonjour,

    J'ai 2 entités : Project et Document avec la relation oneToMany entre les 2 (1 projet = plusieurs documents). Chaque document est dans une catégorie.
    Pour éditer mes documents, je construit un formulaire en lui passant mon projet en paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form = $this->createForm(new ProjectFormType(), $project);
    ensuite dans mon twig pour afficher les éléments, je boucle sur les form.documents
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% for document in form.documents %}
    Jusque là pas de souci.

    J'ai remarqué que mes documents arrivent selon l'ordre qu'ils sont rentrés en BD
    Ma question : Est-ce qu'il est possible de modifier cet ordre ? (autre que dans twig)
    En triant sur la category de document par exemple... Si oui, comment ?
    Merci.

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $form = $this->createForm(new ProjectFormType(), $project);
    $projet tu le récupères en base donc, tu dois écrire une requête et y mettre un ORDER BY afin de trier les documents.

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $this  ->getDoctrine()
           ->getEntityManager()
           ->getRepository('AcmeDemoBundle:Entity')
           ->findBy(array(), array('id' => 'desc'))

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Par défaut
    Merci de ta réponse.
    En fait la variable $project est récupérée automatiquent dans mon controller via le param converter.
    Donc il faudrait modifier la requete par défaut qui renvoie mes projets...
    Autre solution, ne pas utiliser le param converter et récupérer le ID project dans mon controller et ensuite aller chercher le projet qui correspond en base...

  4. #4
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Hello,

    Je te propose deux solutions :

    La solution quick & easy
    L'annotation @ParamConverter (Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter) qui te permet de définir quel service tu veux utiliser pour convertir ton/tes param(s). De cette manière tu peux appeler la requête de ton choix et faire le tri que tu souhaite au lieu d'utiliser le ParamConverter par défaut.

    La solution generic & powerful
    L'utilisation de Doctrine Filters : cet article te décrira leur implémentation nettement mieux que je ne serai capable de le faire. L'idée étant d'avoir la possibilité d'activer ou désactiver un morceau de ta requête à la demande de manière à ce qu'un appel à une même méthode (un findAll() par exemple) te retourne un résultat filtré ou non en fonction de l'activation de tes filtres. C'est notamment utilisé pour les bundles te permettant de faire du soft delete (un champs est rajouté avec une date de suppression mais l'entité existe toujours en base : par contre lorsqu'on veut récupérer toutes les entrées, on ne retourne pas ceux qui sont soft-deleted).
    Je pense que tu pourrais alors te faire un filtre qui te retourne systématiquement tes listes dans l'ordre désiré avec la possibilité de désactiver ce filtre si tu ne veux pas appliquer le tri.

    ++

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Par défaut
    Comme j'aime bien apprendre de nouveaux trucs, je vais regarder ta solution de Doctrine filter, Nico
    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Paramètre par défaut dans une fonction
    Par RobinJulie dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/01/2012, 14h07
  2. Réponses: 1
    Dernier message: 15/11/2011, 08h46
  3. Sélection valeur par défaut dans une zone de liste
    Par Cécile154 dans le forum IHM
    Réponses: 2
    Dernier message: 15/02/2005, 18h20
  4. Valeur par défaut dans une table objet
    Par Ricky81 dans le forum Oracle
    Réponses: 12
    Dernier message: 18/03/2004, 11h52
  5. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34

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