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

Doctrine2 PHP Discussion :

Jointure non repertoriée


Sujet :

Doctrine2 PHP

  1. #1
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut Jointure non repertoriée
    Bonjour,

    J'ai 3 tables dans mon schéma :

    Idee : ID, user_id
    Comment : ID idee_id, user_id
    vote : id, user_id, idee_id

    Normalement, la jointure est faite entre comment et idée, et entre idée et vote.
    Mais la, j'aimerais récupérer pour chaque commentaire, le vote correspondant pour l'idée et l'utilisateur.

    Comment puis je faire ca selon vous ?

    J'ai essayé de forcer la jointure, mais j'obtiens :
    [Semantical Error] line 0, col 151 near 'v WITH c.user_id': Error: Class JaiUneIdee\SiteBundle\Entity\Commentaire has no association named votes
    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     $qb->select('i','c','v')
                        ->leftJoin('i.commentaires', 'c')
                        ->leftJoin('c.votes', 'v', 'WITH', 'c.user_id = v.user_id AND c.idee_id = v.idee_id')
    Merci,
    Pierre

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Mai 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2011
    Messages : 122
    Par défaut
    Bonjour,

    Class JaiUneIdee\SiteBundle\Entity\Commentaire has no association named votes
    Regarde dans ton entité Commentaire, l'attribut votes sur lequel tu fais la jointure n'existe pas; peut-être une erreur de typo ou de casse.

  3. #3
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    Bonjour,

    J'ai donc ajouté une variable $votes, avec les methodes d'ajout et de récupération dans mon entité.
    J'utilise les fichiers yml pour mes entités, mais je prefererais ne pas déclarer cette relation, pas trop envie que doctrine me fasse cette jointure tout le temps alors que je n'en ai besoin que dans un cas précis.

    Mais peut être que je peux le faire, en précisant que la relation ne doit être utilisé qu'a la demande ?

    Est ce que vous auriez une autre idée ?

    Merci en tout cas pour le soutien... je bloque la dessus et j'avoue que ca me motive

    Pierre

  4. #4
    Membre éprouvé
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Mai 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef d'entreprise
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2011
    Messages : 122
    Par défaut
    Tu ne peux pas utiliser une relation si tu ne la déclares pas. Mais il n'y a aucune raison pour que Doctrine aille récupérer les votes des commentaires si tu ne les lui demandes pas. C'est le principe même du lazy loading, les entités liées ne sont récupérées que si elles sont utilisées.

  5. #5
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    Question subsidiaire... Comment puis je faire ma jointure ?

    j'ai essayé de faire ca dans le fichier yaml, mais j'avoue que je ne sais pas du tout quoi lui mettre comme parametre de jointure. Il doit utiliser des colonnes existantes, qui proviennent d'une déclaration de jointure plus bas... bref, c'est un peu le bordel...

    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
    19
     
        manyToOne:
        idee:
          targetEntity: Idee
          inversedBy: commentaires
        user:
          targetEntity: JaiUneIdee\UtilisateurBundle\Entity\User
        moderations:
          targetEntity: ModerationCommentaire
          mappedBy: commentaire
        vote:
          targetEntity: Vote
          joinColumns:
            joinColumn:
              name: user
              referencedColumnName: user
            joinColumn:
              name: idee
              referencedColumnName: idee
    Je ne vois pas trop comment faire ma déclaration... dois je mettre idee(le nom dans l'objet) ou idee_id (le nom dans la table?
    Les deux ne fonctionnent pas dans mes tests...


    j'obtiens cette erreur :
    [Doctrine\ORM\ORMException]
    Column name `idee` referenced for relation from JaiUneIdee\SiteBundle\Entity\Commentaire towards JaiUneIdee\SiteBundle\Entity\Vote does not exist.
    Merci,
    Pierre

  6. #6
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    Bonjour,

    Est ce que vous avez trouvé un moyen de déclarer des jointures sur des colonnes générées ?
    J'ai vu que Doctrine ne pouvait pas faire de jointure en dehors des clefs primaires, mais je ne sais pas trop si ca me concerne.

    Ou, est ce qu'il y a un moyen de forcer doctrine a faire une requete SQL, puis a utiliser le resultat pour l'associer a des objet doctrine ?

    Dans le cas présent, j'ai toutes les informations (idee_id et user_id pour faire le lien, mais si je dois passer par la structure "logique" de doctrine, je dois faire environ 200 requetes de plus sur ma page d'accueil... pour afficher quelque chose de pas non plus super essentiel.

Discussions similaires

  1. [2005] Utilisation de ISNULL(,) pour jointure non systématique
    Par Jinroh77 dans le forum Développement
    Réponses: 5
    Dernier message: 07/11/2015, 16h47
  2. Jointure non reconnue
    Par nicou_doude dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/05/2008, 17h00
  3. Pb de jointure non equi
    Par fdthierry dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/04/2008, 13h50
  4. tablesapace non repertorié
    Par nabou dans le forum Oracle
    Réponses: 19
    Dernier message: 07/07/2006, 16h17
  5. Message Jointure non supportée
    Par Daniel MOREAU dans le forum Access
    Réponses: 6
    Dernier message: 26/02/2006, 18h03

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