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 :

Un enregistrement perdu lors d'une requête [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 50
    Par défaut Un enregistrement perdu lors d'une requête
    Bonjour,

    Je suis un peu perdu.

    Lors d'une toute simple requête sur une table, je n'arrive pas à récupérer le premier enregistrement de cette table!

    Ma table toute simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    +----------+-----+------+
    | nom      | age | sexe |
    +----------+-----+------+
    | Vincent  |  27 | M    |
    | Francois |  24 | M    |
    +----------+-----+------+
    Mon code tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function executeIndex(sfWebRequest $request)
      {
    	$q = Doctrine_Manager::getInstance()->getCurrentConnection();
     
    	$this->foo = $q->execute("SELECT * FROM data");
     
    }
    Dans mon template tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($x = $foo->fetch()){
    	echo $x['nom'];
    	echo "<br />";
    }
    Ca me renvoie juste "François"

    Cependant, un echo $foo->rowCount(); renvoie 2!

    Est-ce que j'ai un problème de curseur qui commence à la ligne 2? Si oui, comment le remettre à 0?

    Merci

  2. #2
    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 : 63
    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
    De l'art de faire compliquer alors qu'il est si simple de faire ... simple !

    La requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // la requête
    $q = Doctrine_querry::getTable('data');
    // récupération des données
    $this->datas = $q->execute();
    On récupère donc toute la table...

    Maintenant, le template pour afficher cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php foreach ($datas as $data) : ?>
       <?php echo $data->getNom() ?><br />
    <?php endforeach; ?>
    Simple, propre, efficace.

    Symfony quoi.

    Je te recommande un passage par le tutoriel de symfony, tous en français.

    Bonne chance,
    Michel Rotta

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 50
    Par défaut
    Oui, j'avais démarré par cette solution, mais ma table "data" n'est pas un objet dans le modèle de données.
    Du coup, je n'ai pas accès aux getters du type getNom().
    (et d'ailleurs non plus directement au getTable)

  4. #4
    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 : 63
    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
    Et pourquoi diable ne la mets-tu pas dans ton modèle ?????

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 50
    Par défaut
    Pour la raison de mon autre post (celui ou tu m'as expliqué les tags).

    Cette table "data", je la crée à la volée. Elle fait partie d'un processus du type formulaire->upload d'un fichier dans une table temporaire->renvoie de stats.

  6. #6
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Bonjour.

    J'avoue que je n'ai pas utilisé Doctrine de cette manière, mais s'il n'y a pas de lignes dans ton code autres que celles que tu nous montre, on peut supposer qu'il s'agit d'un problème dans l'appel des méthodes.

    D'après la documentation Doctrine pour la classe Doctrine_Connection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public PDOStatement|Doctrine_Adapter_Statement execute(string query, array params)
    Quelle est la classe de l'objet renvoyé par la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->foo = $q->execute("SELECT * FROM data");
    Si c'est un Doctrine_Adapter_Statement, que donnent les appels du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($x = $foo->fetch(Doctrine_Core::FETCH_ASSOC, Doctrine_Core::FETCH_ORI_NEXT, 0 )){...}
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $rows = $foo->fetchAll();
    foreach($rows as $row) {....}

  7. #7
    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 : 63
    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
    Le problème est que symfony n'est absolument pas conçu pour travailler avec des tables créées à la volée. C'est adaptable, mais il va falloir y mettre beaucoup plus de code.

    la méthode exécute récupère des données sous forme d'objets du modèle.

    Vu que tu n'as pas de modèle qui décrivent ta table, je n'ai aucune idée de ce que tu peux bien récupérer comme modèle objet.

    Par contre tu as une autre méthode de l'objet doctrine_query qui te retourne un tableau (array) d'enregistrement. Dans ton code, remplace la méthode exécute par la méthode fetchall et tu vas récupérer toutes tes données.

    ATTENTION ! il ne s'agit que de lecture... Impossible de ce servir ici du modèle doctrine pour modifier et gérer les données.

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

Discussions similaires

  1. Tables perdues lors d'une restauration RMAN
    Par ndetroye dans le forum Recovery Manager
    Réponses: 6
    Dernier message: 09/12/2005, 18h27
  2. [MySQL] Perte d'information lors d'une requête de visualisation
    Par niccco dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 21/10/2005, 14h46
  3. Enregistrer le résultat d'une requête dans un fichier Excel
    Par Isa31 dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 15h31
  4. Mauvais noms de colonnes lors d'une requête
    Par nmathon dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/04/2004, 08h27
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 16h26

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