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

ORM PHP Discussion :

Erreur à partir de 2 relations dans doctrine


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Jesmar
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 115
    Par défaut Erreur à partir de 2 relations dans doctrine
    Hello
    Les messages d'explication au début de ce topic m'ont un peu aidé à comprendre les relations
    Dans mon code, je bloque au niveau des relations. Lorsque j’ai une seule relation, le résultat s’affiche mais lorsque j’ai deux ou plusieurs relations (dont la mienne), ça plante. Ça me dit « Unknown relation alias le_nom_de_la_relation »
    On doit pouvoir mettre autant de clés étrangères que l'on veut si je ne me trompe pas.

    Ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Alpha:
      actAs:
        Timestampable: ~
        I18n:
          fields: [title, content]
      columns:
        title:            { type: string(255), notnull: true }
        content:          { type: string(4000), notnull: true }
      relations:
        AlphaTranslation: { local: id, foreign: id, foreignAlias: Alphas }
    Ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Alpha:
      actAs:
        Timestampable: ~
        I18n:
          fields: [title, content]
      columns:
        title:            { type: string(255), notnull: true }
        content:          { type: string(4000), notnull: true }
      relations:
        Beta:             { local: beta_id, foreign: id, foreignAlias: Betas }
        AlphaTranslation: { local: id, foreign: id, foreignAlias: Alphas }

  2. #2
    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
    En général, il vaut mieux mettre tout ton shema.yml pour permettre de mieux comprendre les relations entre les entités.

    Quoi qu'ici, je pense voir l'erreur.

    Quant tu crées une table avec le behavior i18n il crée une deuxième table pour les champs traduits. Il crée aussi la relation entre les deux tables. Le fait de la redéfinir ne peux que générer une total confusion dans doctrine.

    Ton schema devrait donc être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Alpha:
      actAs:
        Timestampable: ~
        I18n:
          fields: [title, content]
      columns:
        title:            { type: string(255), notnull: true }
        content:          { type: string(4000), notnull: true }
      relations:
        Beta:             {  foreignAlias: Betas }
    J'ai supprimé la relation sur la table de translation déjà définie par le I18n et retiré les valeurs par défaut dans l'autre relation.

  3. #3
    Membre confirmé Avatar de Jesmar
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 115
    Par défaut
    négatif
    je viens de tester en mettant la ligne en commentaire et j'ai la même erreur
    sinon, j'ai oublié de mettre le php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function executeIndex(sfWebRequest $request)
      {
        $this->alphas = Doctrine_Core::getTable('Alpha')
          ->createQuery('alph')
          ->select('alph.id, alphTrans.title, alphTrans.content')
          ->innerJoin('alph.AlphaTranslation alphTrans ON alph.id = alphTrans.id')
          ->where('alphTrans.lang = ?', $this->getUser()->getCulture())
          ->execute();
      }

  4. #4
    Membre confirmé Avatar de Jesmar
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 115
    Par défaut
    on dirait que le pb vient de la requête au niveau du innerjoin (mais peut-être qu'elle est lié à autre chose aussi) parce que quand je fais un simple select * from la table sans conditions, je n'ai plus d'erreur

  5. #5
    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
    Si tu connais mieux que moi le fonctionnement de doctrine et symfony, je ne vais pas pouvoir aider beaucoup plus...

    Reste que la relation entre les deux tables d'une entité gérée en i18n EST générée automatiquement et NE DOIS PAS être sur déclarée.

    Et que dans ce cas, la requête ressemblera a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $this->alphas = Doctrine_Core::getTable('Alpha')
          ->createQuery('a')
          ->innerJoin('a.translation t with t.lang = ?', $this->getUser()->getCulture() )
          ->execute();
    Mais ceci est réserver à ceux qui ne savent pas.

  6. #6
    Membre confirmé Avatar de Jesmar
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 115
    Par défaut
    doctrine, je connais pas beaucoup
    sinon, cette requête ne fonctionne pas non plus
    soit le hic vient du innerJoin mais je ne pense pas avoir fait d'erreurs dedans soit ça vient d'ailleurs mais là je ne vois pas pour l'instant

  7. #7
    Membre confirmé Avatar de Jesmar
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 115
    Par défaut
    bizarre
    dans une autre de mes tables qui marchaient (une de celles où je n'ai qu'une seule relation), j'ai justement retiré la relation (qui est censé être générée automatiquement par l'i18n) comme l'a dit Michel Rotta et là ça ne marche plus
    je crois que je vais peut-être remettre ma relation pour les tables fonctionnelles et continuer à bidouiller les autres tables

  8. #8
    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
    Dernier essai....

    Tu as toutes les informations dans mes deux messages.

    Pour rappel.

    Il ne faut pas déclarer manuellement de liaison entre les tables de base et les tables translate.

    La requête doit se baser sur les tables prédéfinies tel qu'indiqué.

    Maintenant tu fais ce que tu veux... Si tu cherches réellement à appliquer la solution (il n'y en a pas d'autre) alors peut-être que je reviens écrire ici.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/01/2012, 19h04
  2. Réponses: 1
    Dernier message: 07/10/2011, 16h27
  3. Erreur d'execution 1004 (formule dans une cellule mise à partir du code)
    Par ghosty04 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/04/2009, 11h04
  4. [Tomcat]erreur au lancement de tomcat dans eclipse
    Par sebos63 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 17/12/2004, 10h40
  5. erreur d'un timer declaré dans un thread
    Par hak5 dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/04/2004, 09h20

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