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

PHP & Base de données Discussion :

[Doctrine] explication d'un schéma yml


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut [Doctrine] explication d'un schéma yml
    bonjour,
    voila pour une appli sous symfony on m'a fourni un schéma yml (merci michel rotta).
    Malheureusement je ne suis pas encore très à l'aise avec doctrine et je doit avour que certains points m'échappent totalement/
    voici le schéma:
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
    groupe:
      columns:
        nom: string(40)
        master_id: integer
      relations:
        master:
          class: user
          local: master_id
          foreign: id
          foreignAlias: groupes
        users:
          class: user
          refClass: groupemember
          foreignAlias: groupes
     
    user:
      columns:
        nom: string(40)
     
    groupemember:
      columns:
        user_id:
          type: integer
          primary: true
        groupe_id:
          type: integer
          primary: true
      relations:
        user:
          foreignAlias: groupemembers
        groupe:
          foreignAlias: groupemembers
     
    semaine:
      columns:
        user_id:
          type: integer
          notnull: true
        groupe_id:
          type: integer
          notnull: true
        semaine:
          type: integer(4)
          notnull: true
        ticket:
          type: integer(4)
          default: 0
        conge:
          type: integer(4)
          default: 0
      indexes:
        user_groupe:
          unique: true
          fields:
            semaine:
              sorting: ASC
            user_id:
              sorting: ASC
            groupe_id:
              sorting: ASC
      relations:
        user:
          foreignAlias: semaines
        groupe:
          foreignAlias: semaines
    premier point qui me passe totalement au dessus de la tête c'est la partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     users:
          class: user
          refClass: groupemember
          foreignAlias: groupes
    je n'arrive pas à comprendre à quoi sert cette notion de refClass. pour moi la relation se fait avec la table User (class: user) mais pourquoi ensuite ce refClass: groupemember et quelle est le lien avec la table groupe ???
      0  0

  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
    Je vais répondre vu que je connais bien le schéma !

    Attention ! ce schéma est tiré d'une application symfony. Il a donc la particularité de décrire simultanément la structure de la base de données ET le modèle objet à mettre en œuvre dans symfony.

    Dans ce schéma nous avons deux tables principales, user (liste des utilisateurs) et groupe (liste des groupes), une table semaine qui permet pour un user pour une semaine de noter certaines informations et une liaison n-n entre user et groupe matérialisée, dans le schéma, par la table groupmember.

    Le table de liaison a donc deux liens vers user et groupe. Mais, dans la vraie vie d'informaticiens que nous sommes, nous n'avons que faire de cette tables, ce que nous voulons c'est avoir les groupes d'un user et les users d'un groupe. C'est le rôle de cette liaisons bizarre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      # Le nom de la liaison, vue du côté où elle est implantée
      users:
        #Vu que le nom de la liaison est différent du nom de la classe qu'elle va mettre
        # en relation, il faut lui préciser le nom de cette classe.
          class: user
        # le nom de la classe de liaison pour notre relation n-n
          refClass: groupemember
        # le nom de la liaison vue de l'autre côté.
          foreignAlias: groupes
    Au passage, on remarque que les deux nom de liaisons ce terminent par un "s" convention en symfony (peut-être en doctrine aussi) que les objets retournés seront des collections et non pas des enregistrements.

    A partir de là, on peut avoir tous les users membres d'un groupe $groupe par :
    $groupe->getUsers() qui va nous retourner une doctrine_collection des doctrine_record correspondants (en fait des sfDoctrineRecord pour la version qui tourne dans symfony).

    Et on peut mettre plusieurs user dans un groupe, si on a leurs id, par exemple les user 2, 8, 9. doivent être dans un groupe $groupe, on va mettre :
    $groupe->setUsers(array(2,8,9)) elle est pas belle la vie ?

    Et pourquoi nous n'avons pas la même chose sur la liaison semaine ? Parce qu'il y a des attributs à semaine et que dés qu'il y a des attributs, doctrine ne considère plus cela comme une liaison n-n, mais comme deux liaisons n-1 et 1-n.
      0  0

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    bon je commence à mieux comprendre (à la 3ème lecture quand même ).
    Deux points qui me chagrine un peu.
    La liaison n-n entre un user et un groupe, ce n'est pas très gênant, mais dans le principe un user ne peut appartenir qu'à un seul groupe. y a t il moyen de l'indiquer dans le shéma ?

    d'autres part de quoi veut tu parler quand tu indique que la table semaine comporte des attributs ?
      0  0

  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
    Cette discutions me semble faire double emploi avec la discutions sur le listes dans sous forum symfony. Pour rendre le tous plus claire, je propose d'y continuer la discutions et de geler celle-ci.

    Suite : http://www.developpez.net/forums/d98...te-formulaire/
      0  0

Discussions similaires

  1. Besoin d'explication sur un schéma
    Par Boussoar dans le forum Simulink
    Réponses: 5
    Dernier message: 30/01/2018, 09h36
  2. Explication concernant un schéma
    Par WhiteTigerZ dans le forum Administration
    Réponses: 5
    Dernier message: 02/12/2013, 15h14
  3. Réponses: 3
    Dernier message: 31/01/2012, 19h04
  4. [1.x] Question sur le schéma.yml
    Par PeytaWodka dans le forum Symfony
    Réponses: 11
    Dernier message: 06/05/2011, 09h06
  5. Réponses: 4
    Dernier message: 12/04/2010, 16h48

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