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 :

Problem avec doctrine et génération des tables


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Par défaut Problem avec doctrine et génération des tables
    Bonjour,

    j'ai remarqué un problème dans la génération de mes tables à partir de doctrine. Lorsqu'il y a une association entre les tables, les liaisons au niveau objet sont bonnes mais dans les tables il ne crée pas les clés étrangères. Il index juste l'id. ?

    Ma base de donnée est sqLite

    Voici une partie de mon script doctrine :

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    User:
      tableName: Users
      columns:
        idUsers:
          type: integer(4)
          primary: true
          notnull: true
          autoincrement: true
        login:
          type: string(45)
          unique: true
          notnull: true
        password:
          type: string(45)
          notnull: true
        description:
          type: string(200)
        isActivated:
          type: boolean
          notnull: true
          default: false
      relations:
        Groups:
          class: Group
          refClass: UsersGroup
          local: idUsers
          foreign: idGroups
          foreignAlias: Users
        Settings:
          class: Setting
          refClass: SettingsGateway
          local: idUsers
          foreign: idSettings
          foreignAlias: Users
          onDelete: CASCADE
        Logs:
          class: Log
          refClass: SettingsGateway
          local: idUsers
          foreign: idLogs
          foreignAlias: Users
          onDelete : CASCADE
     
     
     
    Group:
      tableName: Groups
      columns:
        idGroups:
          type: integer(4)
          primary: true
          notnull: true
          autoincrement: true
        name:
          type: string(45)
          unique: true
          notnull: true
        description:
          type: string(200)
     
     
    UsersGroup:
      tableName: UsersGroups
      columns:
        idUsers:
          type: integer(4)
          primary: true
          notnull: true
        idGroups:
          type: integer(4)
          primary: true
          notnull: true
      relations:
        User:
          class: User
          local: idUsers
          foreign: idUsers
          foreignAlias: UsersGroups
        Group:
          class: Group
          local: idGroups
          foreign: idGroups
          foreignAlias: UsersGroups
      indexes:
        fk_User_has_Group_User:
          fields: [idUsers]
        fk_User_has_Group_Group1:
          fields: [idGroups]
    Merci d'avance

  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
    Le modèle revu et corrigé tel que je l'aurais fait pour moi ;
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    User:
      tableName: Users
      columns:
        login:
          type: string(45)
          unique: true
          notnull: true
        password:
          type: string(45)
          notnull: true
        description:
          type: string(200)
        isActivated:
          type: boolean
          notnull: true
          default: false
      relations:
        groups:
          class: group
          refClass: UsersGroup
          foreignAlias: users
        Logs:
          class: Log
          refClass: SettingsGateway
          local: idUsers
          foreign: idLogs
          foreignAlias: Users
          onDelete : CASCADE
     
     
     
    Group:
      tableName: Groups
      columns:
        name:
          type: string(45)
          unique: true
          notnull: true
        description:
          type: string(200)
      relations:
        users:
          class: user
          refClass: UsersGroup
          foreignAlias: groups
     
     
    UsersGroup:
      tableName: UsersGroups
      columns:
        user_id:
          type: integer
          primary: true
          notnull: true
        group_id:
          type: integer
          primary: true
          notnull: true
      relations:
        user:
          local: user_id
          foreign: id
          foreignAlias: UserGroups
        group:
          local: group_id
          foreign: idGroups
          foreignAlias: UserGroups
     
     setting:
      columns:
        user_id: integer
        truc: string
      relations:
        user:
          local: user_id
          foreign: id
          foreignAlias: settings
     
    log:
      columns:
        user_id: integer
        truc: string
      relations:
        user:
          local: user_id
          foreign: id
          foreignAlias: logs
    Les clefs sont auto-générée, en id, integer. (soit integer(8) )
    Les relations s'inscrivent du côté n de la relation 1-n
    La relation n-n entre user et group est toujours un peu compliqué à mettre en place et nécessite 4 relations : deux depuis la table pivo, relation 1-n classique, une sur chacune des deux tables n pour leur permettre de récupérer directement les enregistrements d'en face.

    Je n'ai jamais testé ce type de schéma sur sqlite. Sur MySql, les index sont créé directement, les tables sont en imoDB et gère les relations. Je ne connais pas suffisamment sqlite pour prédire le comportement.

Discussions similaires

  1. [WD-2007] probleme avec la generation de la table des matieres
    Par isoman dans le forum Word
    Réponses: 1
    Dernier message: 12/06/2009, 15h31
  2. Réponses: 3
    Dernier message: 18/09/2006, 20h55
  3. MySQL - Probleme avec 2 index sur une table
    Par xG-Hannibal dans le forum Outils
    Réponses: 7
    Dernier message: 31/03/2006, 14h08
  4. Réponses: 8
    Dernier message: 13/08/2004, 12h32
  5. [langage] probleme avec les listes dans des listes
    Par pqmoltonel dans le forum Langage
    Réponses: 7
    Dernier message: 27/04/2004, 12h32

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