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 :

Problème de jointure, fichier Yml


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut Problème de jointure, fichier Yml
    Bonjour,

    Cela fait plusieurs jours que je cherche le moyen de faire des jointures avec ce fichier YML et Symfony,

    S'il vous plait aider moi

    J'utilise un table dseCode, cette table devrait être reliée vers les tables dseItem, dseSection, dseMode

    En fait je veux utiliser la table dseCode pour recupérer un genre d'adresse avec les clés étrangères des autres tables.

    Voici le 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
    41
    42
    43
    44
    45
    46
    47
     
    Section:
      tableName: dseSection
      columns:
        libelleSection:                      { type: string(40), notnull: true, unique: true }
        descriptionSection:                  { type: string(4000)}
        rangSection:                         { type: integer(10), notnull: true }
      relations:
        Code:                                { type: many, class: Code, local: id, foreign: section_id }
      options:
        type: MyISAM
     
    Mode:
      tableName: dseMode
      columns:
        typemode:                            { type: string(40), notnull: true }
      relations:
        Code:                                { type: many, class: Code, local: id, foreign: mode_id }
        Item:                                { type: many, class: Item, local: id, foreign: mode_id }
      options:
        type: MyISAM
     
    Item:
      tableName: dseItem
      columns:
        libelleItem:                         { type: string(4000), notnull: true }
        mode_id:                             { type: integer, notnull: true }
      relations:
        Code:                                { type: many, class: Code, local: id, foreign: item_id }
        Mode:                                { local: mode_id, foreign: id }	
      options:
        type: MyISAM
     
    Code:
      tableName: dseCode
      columns:
        colonne_id:                          { type: integer, notnull: true }
        section_id:                          { type: integer, notnull: true }
        item_id:                             { type: integer, notnull: true }
        mode_id:                             { type: integer, notnull: true }
      relations:
        Colonne:                             { local: colonne_id, foreign: id, foreignAlias: Codes }
        Section:                             { local: section_id, foreign: id, foreignAlias: Codes }
        Mode:                                { local: mode_id, foreign: id, foreignAlias: Codes }
        Item:                                { local: item_id, foreign: id, foreignAlias: Codes }
      options:
        type: MyISAM

    Est-ce que mon fichier est bon?
    Et comment pourrais-je faire ma jointure s'il vous plait?
    Faut-il rajouter des type : one ou many?
    des personnes les utilisent, d'autre pas...

    Merci de m'éclairer s'il vous plait

  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
    Bonjour et bienvenu sur notre forum.

    L'usage de la fonction rechercher dans cette salle aurait apporter de nombreuses réponses immédiates sans avoir à patienter un long week-end...

    Pour ton cas particulier.
    Les tables sont correctement définies, le nom des tables sont conformes à la norme, les noms des clefs primaires sont conformes, les nom des clefs liées sont conformes. Déjà un soucis de moins.

    Pour les noms des champs j'aurais plutôt mis "libelle_section" que "libelleSection", mais cela ne changera rien à la liaison.

    Pour les liaisons, avec ton fichier où les normes sont parfaitement respectées et dans le cas de liaisons 1-n elles sont très simple à mettre en œuvre en respectant une règles : une liaison ne doit se mettre que sur une seul des entités (table) en relation, elle sera définie automatiquement sur les deux côtés, elles doivent être écrite sur le côté "n" de la relation "1-n". Le seul paramètre a renseigner (si les noms de champs suivent la norme) est "foreignAlias" qui est le nom de la relation vu de l'autre côté.

    Donc pour la relation entre "section" et "item" cela donne
    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Item:
      ...
      relations:
        Section:
          foreignAlias: Items
        ...
    Donc pour un "$section" on va retrouver tous les items par
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $section->getItems()
    soit une collection d'objet, d'où le "s" terminal qui l'indique.

    Alors que pour un "$item" on va retrouver la section liée par
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $item->getSection()
    sans le "s" donc un objet sfRecord unique.

    A noter que le "s" est une convention, pas une obligation.

    Attention, tu forces le type de table à MyISAM hors dans mes souvenir MyIsam ne supporte pas les contraintes de liaisons. A ta place je supprimerais le type de table et laisserais choisir Doctrine ce qui lui convient et qui sera, dans ton cas un IMMODB.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    Attention, tu forces le type de table à MyISAM hors dans mes souvenir MyIsam ne supporte pas les contraintes de liaisons. A ta place je supprimerais le type de table et laisserais choisir Doctrine ce qui lui convient et qui sera, dans ton cas un IMMODB.
    Merci pour la "bienvenue" et ta réponse

    Malheuresement, on me demande de faire le site en MyISAM, ce qui complique en effet les choses...

    Je vais faire des tests en IMMODB et laiserai un message plus tard pour la confirmation

  4. #4
    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
    Sauf dans le cas où tu prévois un site avec une base très volumineuse (plusieurs centaine de Giga) et uniquement en consultation tu n'as aucun intérêt à travailler en MyISAM.

    Et, à part du masochisme, je ne vois pas l'intérêt pour le client à utiliser un moteur de base de données moins performant, sauf pour le cas de consultation pure sur de gros volume.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Sauf dans le cas où tu prévois un site avec une base très volumineuse (plusieurs centaine de Giga) et uniquement en consultation tu n'as aucun intérêt à travailler en MyISAM.

    Et, à part du masochisme, je ne vois pas l'intérêt pour le client à utiliser un moteur de base de données moins performant, sauf pour le cas de consultation pure sur de gros volume.
    Oui je suis tout à fait d'accord avec toi, mais il veut que ça soit en MyISAM parce qu'il me dit que c'est plus facile pour les sauvegardes, plus simple et plus rapide à remettre en place...

    ca ne m'arrange pas lol

  6. #6
    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
    Citation Envoyé par Sethyan Voir le message
    Oui je suis tout à fait d'accord avec toi, mais il veut que ça soit en MyISAM parce qu'il me dit que c'est plus facile pour les sauvegardes, plus simple et plus rapide à remettre en place...
    Ceci est faux.

    Soit il utilise un outils genre phpMyAdmin pour faire les sauvegardes et il n'y a aucune différence, soit il utilise des outils spécialisés de sauvegarde et ... il n'y a aucune différence.

    Et pour la remise en place, même raisonnement.

    C'est surtout parce qu'il ne sait pas trop de quoi il parle. Les pertes de fonctionnalité et de sécurité (pas de contraintes, pas de log) sons largement suffisantes pour utiliser IMMODB plutôt que MyISAM.

    Peut-être lui proposer une formation sur l'administration de base de données ?

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

Discussions similaires

  1. Vraisemblable problème de jointure
    Par pimousse76 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 15h34
  2. [MS Access] Problème de jointure
    Par Erakis dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2005, 21h15
  3. Problème de jointure ?!
    Par ebaynaud dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/11/2004, 11h27
  4. Problème de gestion fichiers
    Par glutock dans le forum ASP
    Réponses: 2
    Dernier message: 08/04/2004, 11h55
  5. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44

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