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] problème Warning: avec findAll()


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut [Doctrine] problème Warning: avec findAll()
    Salut.

    J'utilise Symfony, et j'ai un problème avec ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public function executeShow(sfWebRequest $request)
      {
        $this->accueil = Doctrine::getTable('Accueil')->findAll();
        $this->forward404Unless($this->accueil);
      }
    qui me met un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'Doctrine_Collection' does not have a method 'getContent' in P:\BOULOT\WEB\Twan\symfony\lib\vendor\symfony\lib\escaper\sfOutputEscaperObjectDecorator.class.php on line 64
    Alors que celui-ci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public function executeShow(sfWebRequest $request)
      {
        $this->accueil = Doctrine::getTable('Accueil')->find(array(1));
        $this->forward404Unless($this->accueil);
      }
    INFOS COMPLÉMENTAIRES :
    - Le module d'Accueil du site que je réalise ne contient qu'un article (donc une seule entrée dans la table "accueil").
    - Comme j'utilise data-load plus souvent que build --all --and-load, les id des fixtures ne sont pas remises à zéro, et donc ça pose problème avec le find(array(1)) qui pointe vers nullepart (puisque la seule entrée de la table Accueil voit son id augmenter à chaque rechargement des fixtures) !
    - Bref, et puis de toutes façon j'aimerais comprendre pourquoi findAll() ne fonctionne pas. C'est sensé retourné toutes les entrées non?

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut
    Bon, la réponse est la suivante :

    - findAll() est sensé récupérer une collection d'objets.
    - donc si on n'a qu'un objet dans une table, cette fonction va échouer (c'est stupide mais bon...).

    Il faut donc soit sélectionner l'objet par un de ses champs (id par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->accueil = Doctrine::getTable('Accueil')->find(array(1));
    ... soit par une requête simple sélectionnant tout ce qui se trouve dans la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $q = Doctrine_Query::create()
                        ->select('a.*')
                        ->from('Accueil a');
     
    $this->accueil = $q->fetchOne();
    fetchOne() va récupérer le premier (ou dernier, j'en sais rien) des objets trouvés dans la table !

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

Discussions similaires

  1. problème message warning avec la SDL
    Par ShinobiX1 dans le forum SDL
    Réponses: 0
    Dernier message: 05/03/2014, 18h50
  2. Réponses: 0
    Dernier message: 26/04/2011, 16h15
  3. [doctrine]problème avec syntaxe du schema.yml
    Par flora806 dans le forum ORM
    Réponses: 3
    Dernier message: 15/03/2011, 10h19
  4. Réponses: 13
    Dernier message: 10/03/2011, 10h17
  5. Problème Internationalisation avec Doctrine
    Par keyros dans le forum ORM
    Réponses: 22
    Dernier message: 17/08/2010, 15h09

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