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

PHP & Base de données Discussion :

[Doctrine] Je veux mes trois tuples !


Sujet :

PHP & Base de données

  1. #1
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut [Doctrine] Je veux mes trois tuples !
    Salut à toutes et à tous

    Plongé dans l'internationalisation de ma db, je me retrouve face à un comportement que je trouve, si pas étrange, pour le moins dérangeant...

    Le modèle d'une page est défini comme suit:
    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
    AspyctPage:
      actAs:
        Timestampable: ~
        I18n:
          fields: [title, header, contents]
          actAs:
            Sluggable:
              fields: [title]
              uniqueBy: [lang, title]
      columns:
        category_id:  { type: integer, notnull: true }
        title:        { type: string(255), notnull: true }
        active:       { type: boolean, notnull: true, default: 0 }
        highlight:    { type: boolean, notnull: true, default: 0 }
        header:       { type: string(500), notnull: true }
        contents:     { type: string(4000), notnull: true }
      relations:
        AspyctCategory:
          onDelete: CASCADE
          local: category_id
          foreign: id
          foreignAlias: AspyctPages
    Lors de l'affichage d'une page, je souhaite également récupérer les autres versions de cette page. Ainsi, je pourrais afficher des liens pour les versions dans les autres langues.
    Pas très difficile en soi, un petit join et c'est réglé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      public function getPageGroup($id)
      {
        $q = $this->createQuery('p')
          ->leftJoin('p.Translation t')
          ->where('p.active = true')
          ->where('p.id = ?', $id);
     
        return $q->execute();
      }
    Seulement voila, Doctrine ne semble pas être du même avis que moi. Et pour cause: malgré que MySQL me retourne 3 tuples quand j'exécute cette requête (ce qui est conforme à mes attentes), Doctrine refuse de m'en sortir plus d'un.

    La requête générée est celle-ci (notez au passage que le p.active = true est purement et simplement supprimé... )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT (...) FROM aspyct_page a
    LEFT JOIN aspyct_page_translation a2 ON a.id = a2.id WHERE (a.id = '1')
    Fait étonnant: selon la culture actuelle sélectionnée, Doctrine me sort la page "adéquate", en évitant allègrement les deux autres... Je devine donc qu'il me fait une sorte de tri sélectif.
    Et quand je veux faire un count, il me rajoute un group by sur... aspyct_page.id Ca fausse évidemment le résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT COUNT(*) AS num_results FROM (
      SELECT a.id
      FROM aspyct_page a
      LEFT JOIN aspyct_page_translation a2 ON a.id = a2.id
      WHERE a.id = '1' GROUP BY a.id
    ) dctrn_count_query
    Alors... je comprends et respecte son point de vue, mais... comment puis-je obtenir mes 3 pages et imposer mon p.active = true? Je voudrais bien sur ne pas avoir à mettre les mains dans du SQL pur, ce qui me forcerait à créer des objets moi-même (tiens, ça rend paresseux de développer...). Non, enfin, par clarté du code

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Haaa, j'ai la réponse

    Il semblerait que les créateurs de Doctrine aient mieux pensé les choses que moi:
    les trois versions différentes sont incluses dans un seul objet:
    http://www.doctrine-project.org/docu...behaviors:i18n

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

Discussions similaires

  1. Positionnement de mes trois colonnes sur ma page d'accueil
    Par Abou Zar dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 10/01/2012, 16h05
  2. Réponses: 1
    Dernier message: 14/05/2007, 11h24
  3. "\" dans mes textes, je n'en veux pas
    Par lodan dans le forum Langage
    Réponses: 1
    Dernier message: 24/09/2006, 18h24
  4. Réponses: 2
    Dernier message: 08/08/2006, 22h17

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