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 :

Données recursive d'une table [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 35
    Par défaut Données recursive d'une table
    Bonjour,

    Je développe un projet sous Symphony (surement la raison de ma presence ici) et j'aurais une question !

    J'expose mon application, ca fonctionne comme un dossier et des fichiers sous linux en gros.

    J'ai un projet (ma racine) qui contient des dossiers qui contient lui meme des dossiers et /ou des fichiers.

    Je souhaiterais afficher l'ensemble sur le coté en forme d'arborescence. et la se pose mon soucis : Comment faire appel à un dossier d'un dossier ?

    Dans un premier temps j'ai fait cela :
    <-- lib/model/TDossierPeer.php -->
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #Recupere une liste de dossier d'un dossier
    static public function getWithDossiers(Criteria $criteria = null)
        {
            if (is_null($criteria))
            {
                $criteria = new Criteria();
            }
     
            $criteria = new Criteria();
            $criteria->addJoin(self::C_FK_DSS_DSS_ID, TDossierPeer::C_PK_DSS_ID);
            $criteria->setDistinct();
     
            return self::doSelect($criteria);
        }

    <-- lib/model/TDossier.php -->
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class TDossier extends BaseTDossier
    #Recupere la liste des dossiers d'un dossier particulier
    {
     
        public function getWithDossiersN2()
        {
            $criteria = new Criteria();
            $criteria->add(TDossierPeer::C_FK_DSS_DSS_ID, $this->getCPkDssId());
     
            return TDossierPeer::getWithDossiers($criteria);
        }
     
    }

    Et je l'appel dans un component :
    <-- apps/frontend/modules/projet/templates/_monMenu.php -->
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php foreach ($t_dossiers1 as $i => $t_dossierN1): ?>
            <?php echo "<li class=\"toggleSubMenu\"><span>".$t_dossierN1->getDssRef()."</span>"; ?>
            <?php #if ($t_dossiers2) :?>
                <?php echo "<ul class='navigation'>"; ?>
     
                <?php foreach ($t_dossierN1->getWithDossiersN2() as $j => $t_dossierN2): ?>
                    <?php echo "<li> Hello <\li>" ?>
                    <?php echo "<li class=\"toggleSubMenu\"><span>".$t_dossierN2->getDssRef()."</span>"; ?>
                <?php endforeach; ?>
                <?php echo "</ul>"; ?>
            <?php #endif; ?>
     
        <?php endforeach; ?>

    Et juste pour info (histoire de bien comprendre) mon component :
    Code PHP : 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
     
    <-- Projet -->
    <?php
        class projetComponents extends sfComponents
        {
            public function executeMonMenu(sfWebRequest $request)
            {
                #$this->t_projet_list = TProjetPeer::doSelect(new Criteria());
     
                if ($request->getParameter('c_pk_prj_id'))
                {
                    $this->t_projet = TProjetPeer::retrieveByPk($request->getParameter('c_pk_prj_id'));
     
                    $this->t_dossiers1 = TDossierPeer::getWithProjets();
     
                    #$this->forward404Unless($this->t_projet);
                }
                else
                {
                    $this->t_dossiers1 = Null;
                }
            }
        }
    ?>

    Aucune erreur ne se produit mais rien n'est recupérer, et SQL Query donne ca :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT t_dossier.ID, t_dossier.DSS_REF, t_dossier.DSS_DESIG, t_dossier.DSS_DATE_MODIFICATION,
    t_dossier.DSS_DATE_CREATION, t_dossier.DSS_DESC_EVOLUTION, 
    FROM `t_dossier` 
    WHERE t_dossier.C_FK_DSS_DSS_ID=t_dossier.ID

    Et dans mon cas il me faudrait :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT T_D2.ID, T_D2.DSS_REF, T_D2.DSS_DESIG
    FROM `t_dossier` as T_D1, `t_dossier` as T_D2
    WHERE T_D2.C_FK_DSS_DSS_ID=T_D1.ID

    Il suffirait certainement d'un Alias ??

    J'espere avoir ete explicite

    Merci pour votre futur aide !

  2. #2
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2003
    Messages : 35
    Par défaut
    J'ai reussi finalement en faisant ma requete moi meme :
    Code php : 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
     
    public function getWithDossiersN2()
        {
     
            $criteria = new Criteria();
     
            $connection = Propel::getConnection();
            $query = 'SELECT DISTINCT T_D2.C_PK_DSS_ID AS id
                        FROM `t_dossier` AS T_D1, `t_dossier` AS T_D2
                        WHERE T_D1.C_PK_DSS_ID =%s
                        AND T_D2.C_FK_DSS_DSS_ID = T_D1.C_PK_DSS_ID';
     
            $query = sprintf($query,$this->getCPkDssId());
            $statement = $connection->prepare($query, array(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL));
     
            $statement->execute();
     
            $Entre = 0;
     
            while ($row = $statement->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
     
                $Entre = $Entre+1;
            }
     
            if ($Entre == 0)
            {
                $criteria = null;
            }
            else
            {
                $criteria->add(TDossierPeer::C_PK_DSS_ID, $SelectID, Criteria::IN);
            }
     
            return TDossierPeer::getWithDossiers($criteria);
        }

    Si ca intéresse quelqu'un c'est dit !

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

Discussions similaires

  1. Algo de recursion sur une table ?
    Par lennelei dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 06/07/2006, 20h18
  2. Eviter l'ajout de données existantes dans une table
    Par Tatoine dans le forum Access
    Réponses: 6
    Dernier message: 05/07/2006, 15h21
  3. Import de Données Excel dans une Table Access
    Par YLF dans le forum Access
    Réponses: 2
    Dernier message: 20/02/2006, 19h02
  4. Réponses: 7
    Dernier message: 27/01/2006, 15h57
  5. Insérer des données Excel dans une table ACCESS
    Par anikeh dans le forum Access
    Réponses: 4
    Dernier message: 21/12/2005, 22h42

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