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 :

récupérer les données d'une jointure: symfony [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut récupérer les données d'une jointure: symfony
    bonsoir tout le monde,

    lors d'une jointure, je n'ai pas pu afficher aucune donnée,
    encore je ne sais pas si le problème provient de l'affichage ou bien ma méthode n'a pas pu récupéré les données

    si quelqu'un peut m'aider je serai très reconnaissante
    //ArticlesTable.class.php
    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
     
    static public function getArticleRupture()
        {
         $q=Doctrine_Query::create()
               ->select('a.codearticle',
                        'a.ref',
                        'a.designationarticle',
                    'a.designationlongarticle',
                    'a.stockreel',
                    'a.minStock',
                    'a.stocktheorique',
                    'a.gestionstock',
                      'a.bloque',
                        'r.libellerayon')
               ->from('Articles a')
               ->leftJoin('a.Rayon r')
               ->where('r.coderayon = ?', 'a.codearticle')
               ->andWhere('a.GestionStock=?','1')
               ->andWhere('a.Stockreel <=?','a.MinStock');
             return $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
        }
    //action.class.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function executeIndex(sfWebRequest $request)
      {
          $this->ruptures = ArticlesTable::getArticleRupture();
      }
    et pour mon code d'affichage;
    // indexSuccess.php:
    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
    35
     
    <table>
      <caption> Liste des Articles en rupture de stock </caption>
      <thead>
        <tr>
          <th>CodeArticle</th>
          <th>Désignation</th>
          <th>Désignation Longue </th>
          <th>Stock réel</th>
          <th>Stock Min</th>
          <th>Stock théorique</th>
          <th>Géré.Stock</th>
          <th>Bloqué</th>
          <th>Rayon</th>
        </tr>
      </thead>
      <tbody>
        <?php foreach ($ruptures as $rupture)
          {
        ?>
        <tr>
          <td><?php echo $rupture->getCodeArticle() ?></td>
          <td><?php echo $rupture->getREF() ?></td>
          <td><?php echo $rupture->getDesignationarticle() ?></td>
          <td><?php echo $rupture->getStockreel() ?></td>
          <td><?php echo $rupture->getMinStock() ?></td>
          <td><?php echo $rupture->getStocktheorique() ?></td>
          <td><?php echo $rupture->getGestionStock() ?></td>
          <td><?php echo $rupture->getBloque() ?></td>
          <td><?php echo $rupture->Rayon()->getLibellerayon() ?></td>
        </tr>
        <?php
           }
        ?>
    </table>

  2. #2
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Par défaut
    Hello,

    Rien ne s'affiche ou tu as une erreur ?

    Si il y a une erreur, essaie getRayon() à la place de Rayon()

  3. #3
    darthmower
    Invité(e)
    Par défaut
    Salut,

    Dans ta requête c'est normal le : "->leftJoin('a.Rayon r')" , je pense pas qu'il faille "a." avant "Rayon" .

    Grispou

  4. #4
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    bonjour darthmower
    Dans ta requête c'est normal le : "->leftJoin('a.Rayon r')" , je pense pas qu'il faille "a." avant "Rayon"
    si je la remplace par ('Rayon r'), j'aurai un message d'erreur

  5. #5
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    bonjour PinGu-

    Hello,

    Rien ne s'affiche ou tu as une erreur ?

    Si il y a une erreur, essaie getRayon() à la place de Rayon()
    je n'ai pas eu une erreur, mais j'ai eu comme affichage le header de la balise <table>, mais le contenu de <tbody>

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'aurais plutôt tendance à écrire ça comme requête :
    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
     
    $q=Doctrine_Query::create()
    ->select('a.codearticle,
    a.ref,
    a.designationarticle,
    a.designationlongarticle,
    a.stockreel,
    a.minStock,
    a.stocktheorique,
    a.gestionstock,
    a.bloque,
    r.libellerayon')
    ->from('Articles a')
    ->leftJoin('a.Rayon r')
    ->where('a.GestionStock=?','1')
    ->andWhere('a.Stockreel <= a.MinStock');
    De plus, ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    return $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
    me semble incompatible avec cette portion de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <td><?php echo $rupture->getCodeArticle() ?></td>
    <td><?php echo $rupture->getREF() ?></td>
    <td><?php echo $rupture->getDesignationarticle() ?></td>
    <td><?php echo $rupture->getStockreel() ?></td>
    <td><?php echo $rupture->getMinStock() ?></td>
    <td><?php echo $rupture->getStocktheorique() ?></td>
    <td><?php echo $rupture->getGestionStock() ?></td>
    <td><?php echo $rupture->getBloque() ?></td>
    <td><?php echo $rupture->Rayon()->getLibellerayon() ?></td>

  7. #7
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    tout à fait d'accord Tirkyth, je l'ai déjà modifié et j'ai eu le même résultat;
    j'ai essayé d'jouter dans l'indexSuccess.php le fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo count($ruptures) ?>
    et j'ai eu comme résultat un 0

  8. #8
    Invité
    Invité(e)
    Par défaut
    Donc déjà ça veut dire que ta requête ne renvoit aucun résultat à priori.

    Es-tu sûre d'avoir des données dans ta base ? Est-tu sûre que ta clause where est correcte ?

    Tu peux essayer de rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $q->getSql(); die;
    Juste avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
    Ca te donner la requête SQL qui est envoyée au serveur de base de donnée. Dedans tu trouveras un "?", à remplacer par un "1". Il faudrait commencer par executer directement cette requête sur ton serveur de base de données pour voir si tu récupères un résultat.

  9. #9
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    exactement, lorsque j'exécute la requête à la main dans le browser du SGBD, la fenêtre s'est fermé
    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
     
    Select articles.CodeArticle AS 'CodeArticle',
    articles.REF AS 'Reférence'  ,
    articles.Designationarticle AS 'Désignation'  ,
    articles.DesignationLongArticle AS 'Désignation Longue'  ,
    articles.Stockreel AS 'Stock réel' ,
    articles.MinStock  AS 'Stock Min' ,
    articles.Stocktheorique AS 'Stock théorique'  ,
    articles.GestionStock AS 'Géré.Stock'  ,
    articles.Bloque AS 'Bloqué'  ,
    rayon.Libellerayon AS 'Rayon'  
    From articles
    innerJoin rayon
        ON articles.Coderayon = rayon.Coderayon 
    where  articles.GestionStock = '1' 
    AND articles.Stockreel <= articles.MinStock
    j'ai essayé pas mal de fois, et j'ai eu le même résultat
    lorsque j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $q->getSql(); die;
    Juste avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $q->execute();
    j'ai eu une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Call to undefined method Doctrine_Query::getSql() in /home/sfprojects/MoreHard/lib/model/doctrine/articlesTable.class.php on line 22
    pour ma base, lorsque j'exécute la requête en la modifiant 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
     
    Select articles.CodeArticle AS 'CodeArticle',
    articles.REF AS 'Reférence'  ,
    articles.Designationarticle AS 'Désignation'  ,
    articles.DesignationLongArticle AS 'Désignation Longue'  ,
    articles.Stockreel AS 'Stock réel' ,
    articles.MinStock  AS 'Stock Min' ,
    articles.Stocktheorique AS 'Stock théorique'  ,
    articles.GestionStock AS 'Géré.Stock'  ,
    articles.Bloque AS 'Bloqué'  ,
    rayon.Libellerayon AS 'Rayon'  
    From articles , rayon 
    WHERE articles.Coderayon = rayon.Coderayon 
    AND  articles.GestionStock = '1' 
    AND articles.Stockreel <= articles.MinStock
    j'ai bien eu le résultat, mais j'ai besoin d'utiliser le innerJoin car j'aurai besoin de faire des autres requêtes avec jointure entre plusieurs tables

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par marwina32 Voir le message
    exactement, lorsque j'exécute la requête à la main dans le browser du SGBD, la fenêtre s'est fermé
    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
     
    Select articles.CodeArticle AS 'CodeArticle',
    articles.REF AS 'Reférence'  ,
    articles.Designationarticle AS 'Désignation'  ,
    articles.DesignationLongArticle AS 'Désignation Longue'  ,
    articles.Stockreel AS 'Stock réel' ,
    articles.MinStock  AS 'Stock Min' ,
    articles.Stocktheorique AS 'Stock théorique'  ,
    articles.GestionStock AS 'Géré.Stock'  ,
    articles.Bloque AS 'Bloqué'  ,
    rayon.Libellerayon AS 'Rayon'  
    From articles
    innerJoin rayon
        ON articles.Coderayon = rayon.Coderayon 
    where  articles.GestionStock = '1' 
    AND articles.Stockreel <= articles.MinStock
    j'ai essayé pas mal de fois, et j'ai eu le même résultat
    Il manque juste un espace entre "inner" et "join" non ?
    Citation Envoyé par marwina32 Voir le message
    lorsque j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $q->getSql(); die;
    Juste avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $q->execute();
    j'ai eu une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Call to undefined method Doctrine_Query::getSql() in /home/sfprojects/MoreHard/lib/model/doctrine/articlesTable.class.php on line 22
    Alors là j'avoue que je comprend pas

  11. #11
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    Citation Envoyé par Tirkyth Voir le message
    Il manque juste un espace entre "inner" et "join" non ?
    oui,
    la requête est exécutable depuis le browser et maintenant, je pense que le soucis se passe entre la récupération des données et la transmission au contrôleur. puisque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo count($ruptures) ?>
    m'a affiché un 0

  12. #12
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    j'ai trouvé d'où provient le souci
    du fichier schema.yml,
    j'ai fais une erreur de relation dans le fichier schema.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rayon:
          foreignAlias: rayon
          local: codearticle
          foreign: coderayon
          type: many
    or, j'aurai du faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rayon:
          foreignAlias: rayon
          local: coderayon
          foreign: coderayon
          type: many
    je vais regénérer le fichier et consulter le résultat

  13. #13
    Invité
    Invité(e)
    Par défaut
    En effet avec une erreur dans la relation c'est normal qu'il ne trouve jamais de résultat avec le inner join.

    J'espère que tu es débloquée maintenant

  14. #14
    Bloody-Kuru
    Invité(e)
    Par défaut
    J'ai (encore) le même problème que toi.
    Peux-tu me dire à quoi correspond ta fonction "Rayon()" ? Pour que je puisse comprendre comment tu récupères le rayon.
    Ton code fonctionne-t-il maintenant ? (je reprends la question de Tirkyth ^^)

    Si oui, j'espère que tu pourras m'aider avec ma jointure moi aussi

  15. #15
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    malheureusement, je n'est pas débloquée de ce problème,
    j'ai corrigé le fichier schema.yml, et je l'ai généré avec la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     php symfony doctrine:build-model
    mais rien n'a été changé lors de l'exécution, la requête exécuée est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    execute : SELECT a.codearticle AS a__codearticle, a.ref AS a__ref, a.designationarticle AS a__designationarticle, a.designationlongarticle AS a__designationlongarticle, a.stockreel AS a__stockreel, a.minstock AS a__minstock, a.stocktheorique AS a__stocktheorique, a.gestionstock AS a__gestionstock, a.bloque AS a__bloque, r.coderayon AS r__coderayon, r.libellerayon AS r__libellerayon FROM articles a INNER JOIN rayon r ON a.codearticle = r.coderayon WHERE (a.gestionstock = ? AND a.stockreel <= ?) - (1, a.MinStock)
    or normalement, après la modification et la génération du fichier je trouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INNER JOIN rayon r ON a.coderayon = r.coderayon

  16. #16
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    Citation Envoyé par Bloody-Kuru Voir le message
    Peux-tu me dire à quoi correspond ta fonction "Rayon()" ? Pour que je puisse comprendre comment tu récupères le rayon.
    bonjour bloody-kuru
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $rupture->getRayon()->getLibellerayon() ; ?>
    le getRayon() : c'est l'appel de la 2ème table de jointure
    le getLibellerayon(): c'est l'appel de sa colonne
    espérant que tu te débloque de ton problème

  17. #17
    Bloody-Kuru
    Invité(e)
    Par défaut
    C'est toi qui a écrit la fonction getRayon() dans la classe Articles ?

  18. #18
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    non, elle une fonction prédéfinie,
    lorsqu'on fait une jointure entre 2 tables, on peut accéder à la deuxième table via la première:
    getLaDeuxièmeTable()->getLaColonne();
    c'est le principe d'orienté objet

  19. #19
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    essaies de voir si ceci peut t'aider : http://www.doctrine-project.org/docu...elated-records

  20. #20
    Bloody-Kuru
    Invité(e)
    Par défaut
    Merci pour le lien !

    Je dois vraiment être idiote. Je ne comprends toujours pas le type d'objet que renvoie une requête avec une jointure...
    J'ai essayé tous les trucs possibles et inimaginables et depuis 2 jours maintenant, mes scripts me renvoient soit des objets de type Table1 soit des objets de type table2.... D'ou les erreurs incessantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unknown record property
    Impossible de les lier.
    Je commence à vraiment saturer d'être sur un problème si simple depuis tant de temps
    Dernière modification par Deepin ; 01/06/2011 à 08h21.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [1.x] Récupérer les données d'une jointure
    Par d10g3n dans le forum Symfony
    Réponses: 8
    Dernier message: 20/02/2010, 23h58
  2. récupérer les données d'une fenetre
    Par snoopo dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 23/06/2006, 17h23
  3. Réponses: 15
    Dernier message: 20/06/2006, 10h29
  4. Récupérer les données après une recherche
    Par cdumas dans le forum Access
    Réponses: 7
    Dernier message: 04/05/2006, 12h09
  5. Récupérer les données d'une iframe
    Par juli1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/02/2005, 22h53

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