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 :

Auto jointure sous doctrine


Sujet :

ORM 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 Auto jointure sous doctrine
    Bonjour,

    Nous essayons de faire une autojointure dans notre base de donnée.

    Le schéma est le suivant :
    Une série a plusieurs séries connexes.

    On a donc une table Serie Connexe qui contient :
    id_serie
    id_serie_connexe

    Voici notre shéma.yml
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    SerieConnexe:
      connection: doctrine
      tableName: serie_connexe
      columns:
        serie_id:
          type: integer
          primary: true
        serie_connexe_id:
          type: integer
          primary: true
      relations:
        Serie:
          foreignAlias: SerieConnexes
          local: serie_id
        Serie:
          foreignAlias: SerieConnectes 
          local: serie_connexe_id
    Serie:
      connection: doctrine
      tableName: serie
      actAs:
        I18n:
          fields: [name]
      columns:
        id:
          type: integer(8)
          primary: true
          autoincrement: true
        name:
          type: string(255)
      relations:
        SerieConnexes:
          foreignAlias: SerieConnexes
          class: Serie
          refClass: SerieConnexe
        SerieConnectes:
          foreignAlias: SerieConnectes
          class: Serie
          refClass: SerieConnexe

    Alors, pour ce qui est de la création de migration, ainsi que de l'application en BDD, c'est nickel. On a bien la table comme on le désire.

    Le seul problème, c'est qu'après notre processus de migration, si on demande a symfony de recréer une nouvelle migration, il va quoi qu'il arrive essayer de créer une relation de nouveau sur série connexe. On obtient donc des messages SQL d'erreur : index existant ou relation existante.

    Avez vous déjà vu ce problème ? Avez vous peut etre un exemple d'autojointure qui fonctionne ?

    Merci,
    Pierre

  2. #2
    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
    Aucune idées ?

    On est vraiment bloqué de notre coté depuis 3 jours la dessus...

  3. #3
    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
    J'espère que tu as trouvé une solution.

    Si non, il me semblerait qu'ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      relations:
        SerieConnexes:
          foreignAlias: SerieConnexes
          class: Serie
          refClass: SerieConnexe
        SerieConnectes:
          foreignAlias: SerieConnectes
          class: Serie
          refClass: SerieConnexe
    tu définisses deux fois un lien n-n de la même table à la même table. Et ton refClass est identique, d'où le message d'erreur. La suppression de la deuxième définition devrait régler le problème.

  4. #4
    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
    Je ne comprends pas vraiment.

    Si j'enlève une des 2 relations, je vais avoir un lien vers une série uniquement non ?

    En SQL j'aurais eu une table séparée avec comme attribut :
    Serie_id
    Serie_id_2

    Si je n'ai qu'une relation, je ne pourrais pas recréer ca si ?

    Enfin, j'ai vachement de mal a piger les relations sous doctrine, je n'ai jamais réussi a trouver un exemple simple qui explique sans parler de modèle et d'objet comme faire une BDD cohérente. (en partant du résultat qu'on veut obtenir dans la BDD et du SQL généré au lieu de partir du modèle).
    Je ne suis donc pas super à l'aise pour comprendre comment optimiser mon shema.yml...

  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
    La relation dans le shema.yml est bidirectionnel.

    Tu y défini les deux côté de la relation dans une seul opération.

    Tous ce qui est derrière foreign est décris pour l'autre côté de la relation.

    En fait la déclaration devrait plutôt ressembler à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      relations:
        SerieConnexes:
          foreignAlias: SerieConnectes
          class: Serie
          refClass: SerieConnexe

Discussions similaires

  1. Encore une jointure sous Oracle pour la route
    Par ebaynaud dans le forum Langage SQL
    Réponses: 15
    Dernier message: 04/11/2004, 11h40
  2. resultat d'une auto jointure
    Par slc dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/09/2004, 13h54
  3. Auto jointure speciale
    Par kv000 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/04/2004, 13h02
  4. gestion de l'auto-incrementation sous pgadmin
    Par $grm$ dans le forum PostgreSQL
    Réponses: 16
    Dernier message: 29/03/2004, 15h42
  5. Pb d'auto incrémentation sous interbase !!!
    Par le.clown dans le forum InterBase
    Réponses: 2
    Dernier message: 26/02/2004, 14h11

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