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 :

[DOCTRINE] Problème appel méthode static


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 58
    Points
    58
    Par défaut [DOCTRINE] Problème appel méthode static
    Bonjour à tous,

    Voilà j'ai un soucis sous Symfony 1.4 avec Doctrine.

    Mon problème est très simple, mais je n'arrive pas à le résoudre :

    Je veux créer une méthode pour ma requête SQL (que je créer dans le model MATABLETable généré par symfony) en static.

    Ma méthode est créée 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
     
     
    public static function getCustNB($soco, $saco, $catco, $perdco, $yrco)
        {
            $q = Doctrine_Table::createQuery('custnb')
                    ->from('CNE')
                    ->innerJoin('SO WITH CNE.soco = SO.'. $soco )
                    ->innerJoin('SA WITH CNE.saco = SA.'. $saco )
                    ->innerJoin('CAT WITH CNE.catco = CAT.'. $catco )
                    ->innerJoin('PERD WITH CNE.perdco = PERD.'. $perdco .' AND CNE.yrco = PERD.' .$yrco );
     
     
            return $q->execute();
        }
    J'essaie ensuite d'utiliser ma méthode dans mon template avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MATABLETable::getCustNB($mes_params...)
    Mais rien à faire j'ai l'erreur Fatal error: Using $this when not in object context in \lib\model\doctrine\MATABLETable.class.php

    Ou bien avec d'autres essais j'ai aussi l'erreur me disant que je ne dois pas appeler la méthode createQuery non static de manière static...

    Pouvez-vous m'aider à appeler/implémenter correctement ma méthode ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Tu fais appel a des méthodes non static dans une méthode static.

    Supprimes le static de ta déclaration.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    Merci de ta réponse.

    Toutefois le soucis persiste, en effet lorsque je retire "static" de la déclaration de ma méthode j'obtiens une nouvelle erreur :
    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
     
    500 | Internal Server Error | sfException
    Call to undefined method sfPHPView::createQuery.
    stack trace
    at ()
    in SF_ROOT_DIR\lib\vendor\symfony\lib\view\sfView.class.php line 567 ...
        $event = $this->dispatcher->notifyUntil(new sfEvent($this, 'view.method_not_found', array('method' => $method, 'arguments' => $arguments)));
     
        if (!$event->isProcessed())
     
        {
     
          throw new sfException(sprintf('Call to undefined method %s::%s.', get_class($this), $method));
     
        }
     
     
        return $event->getReturnValue();
    Et si je le remets je me retrouve de nouveau avec l'erreur :
    Fatal error: Using $this when not in object context in \lib\model\doctrine\MATABLETable.class.php

    Merci de ton aide.

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Ben là tu fais appel à une méthode normal en utilisant un appel d'une méthode static...

    Changes l'appel.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    Je suis vraiment idiot parfois...

    Toutefois... je n'ai aucun résultat, lorsque je fais un var_dump ma variable est à NULL.

    ma méthode est située dans MATABLETable.class.php et dans mon template j'instancie MATABLE ce qui ne me génère pas d'erreur, mais n'entre pas dans ma méthode même si elle est détectée.
    Par contre quand j'instancie MATABLETable pour utiliser ma méthode là j'ai une erreur Catchable fatal error: Argument 2 passed to Doctrine_Table::__construct() must be an instance of Doctrine_Connection, null given, called in...

    Une idée ?
    Je pense que j'arrive au bout

    Merci encore

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Désolé, hier de retour de vacances j'ai écrit peut-être un peu vite.

    C'est le Doctrine_Table qui met la panique...

    Le code statique est bon (obligatoire ?) dans cet objet.

    Le code devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public static function getCustNB($soco, $saco, $catco, $perdco, $yrco)
    {
        return  self::getInstance->createQuery('c')
                    ->innerJoin('SO WITH c.soco = SO.'. $soco )
                    ->innerJoin('SA WITH c.saco = SA.'. $saco )
                    ->innerJoin('CAT WITH c.catco = CAT.'. $catco )
                    ->innerJoin('PERD WITH c.perdco = PERD.'. $perdco .' AND c.yrco = PERD.' .$yrco )
                    ->execute();
    }
    (Non testé) et je ne suis pas trop sur des noms.
    Tes relations changeantes sont bizarre mais n'ayant pas vu le modèle je ne peux dire autre chose que bizarre...
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

Discussions similaires

  1. Appel méthode static
    Par stoner dans le forum Débuter
    Réponses: 5
    Dernier message: 13/12/2013, 23h40
  2. Appel méthode static/no static
    Par stefan73 dans le forum Débuter avec Java
    Réponses: 17
    Dernier message: 31/05/2012, 06h52
  3. [C#] Probléme avec Méthode Static
    Par WebTeamMtl dans le forum C#
    Réponses: 4
    Dernier message: 07/11/2008, 22h27
  4. Appel d'une méthode static d'une autre classe
    Par Mooneer dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2008, 19h05
  5. Débutante - Pb appel méthode static
    Par nmetais dans le forum Langage
    Réponses: 2
    Dernier message: 23/09/2005, 17h23

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