Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 11h48   #1
Membre à l'essai
 
Inscription : mai 2008
Messages : 83
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 83
Points : 21
Points : 21
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 :
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 :
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.
Tyra3l est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 12h38   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 14h04   #3
Membre à l'essai
 
Inscription : mai 2008
Messages : 83
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 83
Points : 21
Points : 21
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 :
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.
Tyra3l est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 14h09   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 14h13   #5
Membre à l'essai
 
Inscription : mai 2008
Messages : 83
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 83
Points : 21
Points : 21
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
Tyra3l est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 08h12   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
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 :
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h34.


 
 
 
 
Partenaires

Hébergement Web