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

ORM PHP Discussion :

[Doctrine] [DQL] Problème avec sfDoctrinePager (COUNT)


Sujet :

ORM PHP

  1. #21
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Oui il me renvoie bien que 2 résultat

  2. #22
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Il faut que je trouve le temps de faire des essais. Il n'y a pas de raison pour que cela ne marche pas.

    Peux-tu déposer ton shema.yml et ton fixature.yml sur le forum ?

  3. #23
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Voila les fichiers merci a toi.
    Fichiers attachés Fichiers attachés

  4. #24
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Bon, j'ai récupéré le schéma, créé la base et introduit 12 chapitres.

    Mais, avec tous nos essais, je ne sais plus ce que tu veux réalisé...

    Un petit point sur ce que tu cherches ...

    Et si tu peux mettre un zip du module tel que tu l'as commencé... cela serait un plus intéressant.

  5. #25
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Pour le module ca va pas être facile car j'ai fais d'autre trucs qui n’ont rien à voir la pagination et donc ca risque de rentre le truc complexe sinon ce que je veux est assez simple c'est une pagination avec les chapitre mais bien sur en utilisant un DISTINCT pour enlever les doublons.

    Merci a toi

  6. #26
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Tu veux la liste des chapitres, pour un intitulé, mais sans doublon dans les chapitres ?

  7. #27
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Oui exactement merci a toi

  8. #28
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Mais je ne comprend plus alors, d'où vient la notion de compter ?

    Et pourquoi pourrait-il y avoir plusieurs chapitres identiques dans la base ?

  9. #29
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Car plusieurs page peuvent être dans le même chapitre donc voila pourquoi plusieurs page peuvent avoir le même chapitre.

  10. #30
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    J'ai un peu joué.

    J'ai créé un module intitule qui m'affiche la liste des intitulés avec le nombre de chapitre (donc je compte par page distinctes). Je suis parti sur une base générée simple :
    frontend intitule intitule --non-verbose-templates --with-doctrine-route
    et une route adaptée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    intitule:
      class: sfDoctrineRouteCollection
      options:
        model:          intitule
        prefix_path:    intitule
        module:         intitule
        model_methods:
          list:         doIntitule
    le model_methods permettant d'indiquer la méthode de l'objet intituleTable à utiliser pour récupérer les données.

    La méthode rajoutée dans intituleTable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public static function doIntitule()
        {
            $q = Doctrine_Query::create()
                            ->from( 'intitule i' )
                            ->leftJoin( 'i.monTexte m' )
                            ->groupBy( 'i.id' )
                            ->select( 'i.*, COUNT(DISTINCT m.num_page) AS nb_chapitre' );
            return $q->execute();
        }
    Et, pour finir joliment, le template modifier pour l'action index
    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
     
    <h1>Intitules List</h1>
     
    <table>
      <thead>
        <tr>
          <th>Id</th>
          <th>Id user</th>
          <th>Title</th>
          <th>Nb chapitre</th>
        </tr>
      </thead>
      <tbody>
        <?php foreach ($intitules as $intitule): ?>
        <tr>
          <td><a href="<?php echo url_for('intitule/edit?id='.$intitule->getId()) ?>"><?php echo $intitule->getId() ?></a></td>
          <td><?php echo $intitule->getIdUser() ?></td>
          <td><?php echo $intitule->getTitle() ?></td>
          <td><?php echo $intitule->getNbChapitre() ?></td>
        </tr>
        <?php endforeach; ?>
      </tbody>
    </table>
     
      <a href="<?php echo url_for('intitule/new') ?>">New</a>
    J'avoue que j'ai un peu galéré sur la requête qui refusait obstinément de passer. En fait, il faut utiliser un nom de champs, il n'est pas possible d'utiliser un count(m.*) par exemple. De toutes les manières, il vérifierait tous les champs et ... plouf. Vu que le texte est différents.

    Ceci répond-t-il à ta question ?

  11. #31
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    J'ai bien compris ta requéte sauf que la elle est pas utilisé dans la pagination de symfony et que pour mon cas le leftJoin est inutile car j'affiche le contenu de "monTexte" avec un where sur l'id de l'intitule choisi.

    Merci a toi

  12. #32
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Je dois dire que le sfPager, me sort un peu par les oreilles !

    Mais.... (roulement de tambours)

    Je pense que j'ai, enfin, la solution.

    Je reste sur mon exemple, qui ne colle pas parfaitement, l'idée est : mais comment qu'on peut récupérer ce f$#@u code select dans le sfPager).

    Il faut dans l'objet intituleTable créer une méthode qui retourne la requête ET qui prend, en paramètre un doctrine_query qui pourrait être vide...
    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
     
        public static function getIntituleDql( Doctrine_Query $q = null )
        {
            $q = ( is_null( $q ) ) ? Doctrine_Query::create()->from( 'intitule i' ) : $q;
     
            $q->leftJoin( 'i.monTexte m' )
                    ->groupBy( 'i.id' )
                    ->select( 'i.*, COUNT(DISTINCT m.num_page) AS nb_chapitre' );
            return $q;
        }
     
        public static function doIntitule()
        {
            $q = self::getIntituleDql();
            return $q->execute();
        }
    j'ai gardé la doIntitule pour vérification et compatibilité et parce que, coté code et méthode, cela peut présenter un intérêt.

    Ensuite on introduit le sfDoctrinePager dans l'action. Attention, j'ai fais un code volontairement édulcoré, il n'y a pas de gestion de la page.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public function executeIndex( sfWebRequest $request )
        {
            $this->intitules = new sfDoctrinePager( 'intitule', 10 );
            $this->intitules->setTableMethod( 'getIntituleDql' );
            $this->intitules->setPage( 1 );
        }
    • Création d'un objet sfDoctrinePager, on précise la table et le nombre de ligne par pages
    • On précise la méthode de l'objet du modèle qui sera utilisée pour récupérer le query
    • non utilisé ici, mais on pourrait préciser des closes complémentaire dans le query par un ->setQuery()
    • on récupère le numéro de la page et on l'indique au pager (heu, en temps normal)


    Et, avec cette méthode, miracle (heu non, logique, mais il fallait trouver), le select est correctement passé et nous retrouvons toutes les données nécessaires.

    Ouf.

  13. #33
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Chapeau l'artiste ca marche nickel, je te remercie de ton aide ca m'enlève une épine du pied.

    Juste une dernière question, car pour être sur que j'affiche le bon texte par rapport a l'intitulé choisi il faut que je rajoute un Where avec un getParameter dans la fonction ?

    Encore merci pour ton aide.

  14. #34
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    En faite je répons moi même a mes question car le mieux c de rajouter un $this->intitules->getQuery()->where() directement de l'executeIndex est ca marche nickel.

    Encore merci.

  15. #35
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Ce n'était pas simple comme problème.

    Un cas rare et, un peu, tordu.

    Il ne te reste plus qu'a fracasser le bouton pour ce terminer en beauté.

  16. #36
    Membre éclairé Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Par défaut
    Voila c'est fait merci encore

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2007] Problème avec columns.count
    Par issoram dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/09/2010, 17h30
  2. Problème avec un count et une imbrication
    Par zoharcryss dans le forum Langage SQL
    Réponses: 11
    Dernier message: 15/07/2009, 16h24
  3. petit problème avec un COUNT()
    Par ctobini dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/12/2007, 17h53
  4. [MySQL] Problême avec un COUNT sur un template
    Par Vinuto dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 26/06/2007, 17h37
  5. [SQL] Problème avec SELECT COUNT(*)
    Par jpascal dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/11/2006, 13h37

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