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 :

problème pour reprendre des données dans une DB [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Points : 22
    Points
    22
    Par défaut problème pour reprendre des données dans une DB
    Bonjour à tous

    Alors ce probleme va vous sembler simple mais j'avoue que j'ai beaucoup de mal.

    J'ai une table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     books:
         id:
         title: varchar(255)
     authors:
        id:
        books_id:
        name:varchar(255)
    Je veux pouvoir sortir le le nom d'un livre et son auteur...

    alors j'ai tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // créons l'objet
    $Books = BooksPeer::retrieveByPk(1);
    //maintenant que j'ai un objet on le passe à la vue
     $this->Books=$Books;
    Donc ici :
    view
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo 'Book: '.$Books->getTitle();
    Ca fonctionne !! j'ai bien le titre ... essayons le titre et l'auteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //le titre 
    echo 'Book: '.$Books->getTitle();
    //l'auteur
    echo 'Author: '.$Books->getAuthors()->getName();
    Erreur : Call to undefined method Books::getAuthors()

    Si qq'un à une idée la dessus

    Merci beaucoup
    Phoelis

  2. #2
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Il n'y a pas de méthode getAuthors dans ta classe Books. Voilà l'erreur.

    Evidemment, sans savoir ce qu'il y a dans tes classes, difficile de deviner la solution.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    tout d'abord Chengj un grand merci pour ta réponse.

    j'avoue être un peu être "perturbé par le si non ne sait pas ce que contient tes classes"

    j'ai du mal car j'ai un point d'entrée qui est action.class.php (dans mon frontend/modules/actions/book)

    mais a part le code que j'ai décris plus haut

    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
    class bookActions extends sfActions
    {
       /**
       * Executes index action
       *
       */
       public function executeIndex()
       {
        }
     
     public function executeBookAction()
      {
    // créons l'objet
    $Books = BooksPeer::retrieveByPk(1);
    //maintenant que j'ai un objet on le passe à la vue
     $this->Books=$Books;
      }
    }
    je n'ai rien d'autre. de quelle classe parles tu stp ? (les classes générées par propel pour les tables, Books.php,BooksPeer.php,Authors.php, AuthorsPeer.php ne contienne aucun code à l'exception de celui mis en place lors de la création via propel)

    je dois être un grand naïf mais je pensais que cela suffisait étant donné que je créais un objet ( via new Criteria(); ) et donc qu'ensuite il me suffisait d'aller chercher les éléments.

    Maintenant je suis quand même étonné que ce soit si compliqué pour symfony de faire : (c'est quand même l'une des requêtes les plus basique existante)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     SELECT books.ID, books.TITLE
    FROM books, authors
    WHERE books.ID =1
    AND books.ID = authors.BOOKS_ID
    LIMIT 1

    PS (juste pour info en utilisant la méthode creole ça fonctionne mais bon c est tellement plus de ligne...)

    encore merci
    phoe

  4. #4
    Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Pays-Bas

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 46
    Points : 45
    Points
    45
    Par défaut
    De memoire, il te genere les classes de tes objets dans le repertoire lib/model par default.
    - Un pour propel
    - Un pour tes modifications qui derivent de la classe propel. Ex : rajout de la fonction to_string.

    Le mecanisme est le suivant :
    S'il y a un lien avec une autre table, il y a une fonction generee par proepl qui te ramene l'objet et tu peux facilement le faire apparaitre en chargeant ta classe avec la methode to_string.

    Autres choses, je vois bien un lien de auteur vers book mais pas de book vers auteur. Tu peux avoir plusieurs auteurs pour un book alors que tu n'as qu'un book par auteur, non ? Il est alors difficile de demander l'auteur d'un book s'il peut y en avoir plusieurs.

    Bon courage.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Merci chaporon

    En effet il y a bien plusieurs classes générées. Et tu as tout a fais raison la base de donnée n'était pas tres bien pensée.
    j'avais donc une methode Authorss :-) et ensuite elle me retournait non pas un objet mais une array d'objets.

    J'ai tout remis en place et cela fonctionne

    Vaoilaaaa
    Phoelis

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

Discussions similaires

  1. [C#] Problème pour récuperer des données dans une datatgridview
    Par Faible37 dans le forum Débuter
    Réponses: 2
    Dernier message: 22/03/2012, 10h26
  2. [MySQL] Php, je ne comprends pas comment faire pour introduire des données dans une table
    Par Liondd dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 14/12/2006, 12h53
  3. [MySQL] Problème de récupération des données dans une fonction
    Par highman dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/10/2006, 20h04
  4. Problème pour rentrer des données dans MySQL
    Par Sandara dans le forum Requêtes
    Réponses: 8
    Dernier message: 06/06/2006, 10h59
  5. [VB6]problème d'insertion des donneés dans une base d'Access2003
    Par lanbok dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/05/2006, 12h17

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