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 :

Unknown relation alias


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut Unknown relation alias
    Bonjour tout le monde,
    j'ai eu un problème: "Unknown relation alias rayon"
    je suis aussi débutante en symfony framework, et j'ai cherché par tout sur le web, j'ai trouvé plusieurs personnes qui ont le même problème désormais je n'ai pas trouvé la solution que me convient,

    pour des informations sur mon code

    //ArticlesTable.class.php
    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
     
    static public function getArticleRupture()
    {
    return Doctrine_Query::create()
    ->select('a.codearticle','a.ref','a.designationarticle',
    'a.designationlongarticle', 'a.stockreel', 'a.minStock',
    'a.stocktheorique', 'a.gestionstock',
    'a.bloque', 'r.libellerayon')
    ->from('articles a')
    ->innerJoin('a.rayon r')
    ->where('r.coderayon = ?', 'a.coderayon')
    ->andWhere('a.GestionStock=1')
    ->andWhere('a.Stockreel<=?','a.MinStock')
    ->execute();
    }
    //action.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function executeIndex(sfWebRequest $request)
    {
    $this->ruptures = ArticlesTable::getArticleRupture();
    }
    Si quelqu'un peut m'aider je serai très reconnaissante,

    cordialement,
    marwa

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    C'est qu'il ne connait pas la relation "rayon" que tu utilises sur "articles".

    Donc :
    1/ Vérifier dans ton schema.yml que tu as bien défini cette relation
    2/ Vérifier que depuis quelle a été définie, le model a bien été regénéré
    3/ S'assurer que dans ton from() et innerJoin() tu mettes des majuscules si tu en as mis dans ton schema.yml. Par exemple : from('Articles a') innerJoin('a.Rayon r') Je ne sais plus si ça a une incidence ou pas mais je sais que moi je les met systématiquement.

    Si le problème n'est toujours pas résolu après ça, je te propose de nous montrer ton schema.yml

  3. #3
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    Bonjour Tirkyth,

    j'ai vérrifié votres remarques, mais j'ai toujours le même problème,

    j'ai récupéré les parties nécessaires du schema.yml:

    Articles:
    connection: doctrine
    tableName: articles
    columns:
    .....
    relations:
    Rayon:
    foreignAlias: Rayon
    local: codearticle
    foreign: codearticle
    type: many

    Rayon:
    connection: doctrine
    tableName: rayon
    columns:
    .....
    relations:
    //rpas de relation pour la table Articles

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je ne vois que cette différence de majuscule qui pourrait poser problème.
    As-tu essayé comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //ArticlesTable.class.php
    static public function getArticleRupture()
    {
      return Doctrine_Query::create()
        ->select('a.codearticle, a.ref, a.designationarticle, a.designationlongarticle, a.stockreel, a.minStock, a.stocktheorique, a.gestionstock, a.bloque, a.libellerayon')
        ->from('Articles a')
        ->innerJoin('a.Rayon r')
        ->where('a.GestionStock = ?', 1)
        ->andWhere('a.Stockreel <= a.MinStock')
        ->execute();
    }

  5. #5
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    j'ai encore le même problème, je suis complètement bloquée;
    toute les jointures ne marchent pas, non seulement dans cette classe, mais j'ai ce problème pour toutes les autres classes

  6. #6
    Bloody-Kuru
    Invité(e)
    Par défaut
    Bonjour,

    As-tu généré tes classes avec le bon schema yaml ? Parce que si tu modifié les relations dans yaml sans regénérer tes classes, ton problème vient surement de là. Doctrine n'aurait juste pas pris en compte les nouvelles relations.

    Ca fait 3h que je suis sur un problème de jointure dans doctrine et je désespère aussi... Il y a encore 1h j'avais le même problème que toi.
    Maintenant, bien qu'il ne me mette plus cette erreur, quand je génère le code de la requête il ne me prends pas en compte les champs de select de la table jointe... Je ne comprends pas pourquoi

  7. #7
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    bonsoir;
    j'ai cru que j'ai déjà généré le schema.yml mais lorsque je l'ai regénéré le nouvel schema.yml, je n'ai plus cette erreur mais une autre,
    Call to undefined method articlesTable::getArticleRupture()!!!
    pour le peremier affichage, il ne m'a affiché que le header du tableau contenant le contenu de la jointure, mais après un refresh, on m'a affiché ce magnifique message
    je vais voir, d'où provient cette erreur

    mercie beaucoup de votre aide,

  8. #8
    Invité
    Invité(e)
    Par défaut
    J'avais pourtant écris
    2/ Vérifier que depuis quelle a été définie, le model a bien été regénéré

  9. #9
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    oué, vous avez raison,
    mais j'ai cru que je l'ai déjà regénéré,
    ça m'a couté 1heur de deception de plus,

    je vous remercie énormément pour votre aide

  10. #10
    Bloody-Kuru
    Invité(e)
    Par défaut
    Ok, vous allez rire...

    J'ai la même erreur alors que mes relations sont bien définies et j'ai regénéré le modèle 1000 fois...
    quelqu'un à l'aide ?

    Je voulais savoir aussi la différence entre :

    $requete = Doctrine_Query::create()
    et
    $requete = $this->createQuery('c')

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bloody-Kuru Voir le message
    Ok, vous allez rire...

    J'ai la même erreur alors que mes relations sont bien définies et j'ai regénéré le modèle 1000 fois...
    quelqu'un à l'aide ?
    Il doit forcément y avoir une erreur pour avoir ce type de problème ! Tu n'as qu'à nous montrer ton schema.yml si tu veux qu'on y jète un oeil.
    Citation Envoyé par Bloody-Kuru Voir le message
    Je voulais savoir aussi la différence entre :

    $requete = Doctrine_Query::create()
    et
    $requete = $this->createQuery('c')
    C'est très similaire.
    Si tu fais un Doctrine_Query::create(), tu créé un objet Doctrine_Query complètement vierge. Tu vas donc devoir ensuite faire un ->from('Blabla b') dessus.

    Alors qu'avec $this->createQuery('c'), un objet Doctrine_Query est instancié et automatiquement la méthode ->from('MaClasse c') est appliquée dessus. Note que le 'c' que tu mets dans createQuery() fait office d'alias dans le from.

    Généralement, quand tu fais une méthode dans une classe XxxxTable, c'est pour récupérer des objets de ce type là, donc tu vas faire un from('Xxxx x'). Autant dans ce cas utiliser le $this->createQuery('x') Ca fait moins de choses à écrire.

  12. #12
    Bloody-Kuru
    Invité(e)
    Par défaut
    Ah d'accord ! Merci beaucoup !
    Mais comment sait-il quelle classe est affiliée à tel alias ? Cela se fait automatiquement par rapport à la classe ou se trouve la requête ?

    Quel type d'objet renvoie une requête composée de 2 tables ? (désolée pour toutes ses questions...)

  13. #13
    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 : 62
    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
    La syntaxe "$requete = $this->createQuery('c')" ne peut être utilisé que dans un objet du modèle. Dans ce cas par exemple lib/model/doctrine/article.class?php . PAS dans lib/model/doctrine/ArticleTable.class.php

    Il serait bien de remettre la dernière version du shema.yml si possible entre deux balise code pour permettre une meilleur lecture.

    Les relations doivent être définies dans le shema et, en générale, ne le sont pas dans la requête, et surement pas avec un inerjoin.

    Dans la requête le faite de mettre un form('MaTable t') indique à doctrine d'utiliser la table 'MaTable' avec l'allias 't'. Dans le cas d'une ouverture dans un objet du model (cf § 1) le "$this->createQuery('a')" indique qu'il va ouvrir la table des articles (repris du model) avec pour allias "a".

    Il faut que le modèle soit fonctionnel et ces relations correctement définies. On rajoute alors la table enfant par in innerjoint(). C'est doctrine qui va créer automatiquement les liaisons, à partir du model créé a partir du schema. L'idée de départ était bonne, il semblerait que le schema n'était pas au point.

    On peut tester parfois les requêtes générées, si on arrive jusqu'à l'affichage du template et la barre de debug, Dans celle-ci on retrouve la requête SQL qui a été envoyée, il ne reste que, par un jeu de copié collé, à la glisser dans un phpMyAdmin par exemple et de la tester, les messages d'erreurs seront alors plus explicite (enfin, pas toujours non plus)

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mimi68 Voir le message
    La syntaxe "$requete = $this->createQuery('c')" ne peut être utilisé que dans un objet du modèle. Dans ce cas par exemple lib/model/doctrine/article.class?php . PAS dans lib/model/doctrine/ArticleTable.class.php
    C'est l'inverse en fait. Dans ArticleTable on peut faire un $this->createQuery() alors que dans un objet Article en général tu fais un $this->getTable()->maMethodeQuiFaitLeCreateQueryEtQuiRenvoitDesTrucs(). Au pire il y a $this->getTable()->createQuery()
    Et il existe aussi Doctrine::getTable('Article')->createQuery() quand on n'est ni dans l'un, ni dans l'autre.

  15. #15
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 1
    Par défaut merci
    j'avais le même problème et je l'ai résolu grâce à vos idées et conseils, donc, merci beaucoup

Discussions similaires

  1. [1.x] Unknown relation alias sfGuardUser
    Par etoileweb dans le forum Symfony
    Réponses: 2
    Dernier message: 04/01/2012, 10h59
  2. Réponses: 3
    Dernier message: 29/07/2011, 23h39
  3. [1.x] Unknown relation alias et innerJoin
    Par mysticpete dans le forum Symfony
    Réponses: 9
    Dernier message: 09/06/2011, 10h16
  4. [1.x] Unknown relation alias sfGuardUser
    Par YaNnZ dans le forum Symfony
    Réponses: 6
    Dernier message: 03/05/2011, 09h59
  5. [Doctrine] Erreur : "Unknown relation alias"
    Par lordlifen dans le forum ORM
    Réponses: 7
    Dernier message: 18/10/2010, 10h48

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