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 :

Schéma, Many To Many & champ dans la table lien


Sujet :

ORM PHP

Vue hybride

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

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut Schéma, Many To Many & champ dans la table lien
    Bonjour.

    Je suis actuellement sur une application dans laquelle j'ai un objet qui a une ou plusieurs caractéristiques. Une caractéristique peut être associé à 0 ou N objet. Je suis donc dans le cadre d'une relation Many To Many.
    Cependant, lors de la mise en place de cette relation, on peut ajouter un commentaire sur le lien entre un objet et sa caractéristique.

    Le morceau de schéma correspondant est le suivant :

    Code yaml : 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
     
    Objet:
      connection: doctrine
      tableName: objet
      columns:
        idobjet:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        ...
      relations:
        MetEnOeuvre:
          local: idobjet
          foreign: idobjet
          type: many
          cascade: [delete]
     
    Caracteristique:
      connection: doctrine
      tableName: caracteristique
     
      columns:
        idcaracteristique:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        ...
      relations:
        MetEnOeuvre:
          local: idcaracteristique
          foreign: idcaracteristique
          type: many
     
    MetEnOeuvre:
      connection: doctrine
      tableName: met_en_oeuvre
      columns:
        idobjet:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        idcaracteristique:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        commentaire:
          type: string()
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        Objet:
          local: idobjet
          foreign: idobjet
          type: one
          onDelete: CASCADE
        Caracteristique:
          local: idcaracteristique
          foreign: idcaracteristique
          type: one
          onDelete: CASCADE

    Dans le formulaire de l'objet je voudrais pouvoir sélectionner les caractéristiques liées (par une checkbox) et que j'ajoute le commentaire pour chaque caractéristique que je coché.

    Je n'ai cependant pas besoin d'avoir cela dans le formulaire de caractéristiques.

    Note : le commentaire va être amené à être internationalisé.

    Après quelques recherches j'ai cru comprendre que pour avoir les caractéristiques dans le formulaire je pourrais ajouter une relation dans la description de Objet :

    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Caracteristiques :
          foreignAlias: Objets
          class: Caracteristique
          refClass: MetEnOeuvre

    Mais je ne vois pas comment intégrer le commentaire.

    Une idée ?

  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 shema corrigé.
    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
     
    Objet:
      connection: doctrine
      tableName: objet
      columns:
        ...
      relations:
        Caractéristiques:
          class: Caracteristique
          refClass: MetEnOeuvre
          foreignAlias: Objets 
     
    Caracteristique:
      connection: doctrine
      tableName: caracteristique  
      columns:
        ...
     
    MetEnOeuvre:
      connection: doctrine
      tableName: met_en_oeuvre
      columns:
        objet_id:
          type: integer
          primary: true
        caracteristique_id:
          type: integer
          primary: true
        commentaire:  string(255)
      relations:
        Objet:
          onDelete: CASCADE
          foreignAlias: MetEnOeuvres
        Caracteristique:
          onDelete: CASCADE
          foreignAlias: MetEnOeuvres
    • on laisse doctrine créer les clefs primaire lui même, elle s'appeleront "id" de type "integer"
    • les clefs de liaison on comme nom, le nom de la classe plus "_id" (si c'est possible).
    • pas de valeurs par défaut dans le schéma, cela l’alourdi pour rien
    • La liaison ne se déclare que sur une classe, dans le cas d'une relation 1-n, sur la classe n. Pas de paramètres par défaut, il ne reste que le foreignAlias (nom de la relation vue par la classe de l'autre côté de la liaison et, éventuellement, le onDelete.
    • Création d'un lien directe entre objets pour récupérer ces "caracteristiques" (a noter le "s" qui indique dans une relation l'arrivée de plusieurs enregistrements) et son opposé entre caracteristique qui peut avoir plusieurs "objets". Ce lien skip la possibilité du commentaire quant on l'utilise, ce qui n'est pas obligatoire mais peut servir.
    • type string, toujours mettre une taille

    Attention, pour doctrine, malgré le lien n-n défini ici sur objet ceci n'est pas vraiment considéré comme une liaison n-n mais plutôt comme trois tables avec des liaisons &-n. Doctrine ne sait pas gérer les attributs sur une liaison n-n.

    Dans le formulaire de l'objet je voudrais pouvoir sélectionner les caractéristiques liées (par une checkbox) et que j'ajoute le commentaire pour chaque caractéristique que je coché.
    Ceci n'est pas possible avec les outils de base, il faudrait le faire à la mains et cela risque d'être conton. Regarde plutôt du coté du plugin ahDoctrineEasyEmbeddedRelationsPlugin.

    Note : le commentaire va être amené à être internationalisé.
    Serte. Mais cela nécessite une modifications subtentiels des objets (je suppose que objet et le commentaire dans caracteristique seront aussi internationalisé) et de la manière de les gérer et de les utiliser dans les contrôleurs et les templates. Il n'est donc pas possible de considérer que ceci "va être amené". Il faut le faire avant de commencer ou jamais.

    Mais je ne vois pas comment intégrer le commentaire.
    Normale, ce n'est pas possible... (cf: plus haut)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut
    1ère impression :


    Merci pour tous ces infos et conseils, j'en ai bien pour la semaine :p

    Note : le commentaire va être amené à être internationalisé.
    Serte. Mais cela nécessite une modifications subtentiels des objets (je suppose que objet et le commentaire dans caracteristique seront aussi internationalisé) et de la manière de les gérer et de les utiliser dans les contrôleurs et les templates. Il n'est donc pas possible de considérer que ceci "va être amené". Il faut le faire avant de commencer ou jamais.
    Les caractérisitques et objets sont déjà internationalisés, je n'ai simplement pas copié le code correspondant.

    Je vais essayer de mettre en oeuvre tout çà. Je vous tiens au courant. Merci déjà.

  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
    L'internationalisation implique l'usage du behavior i18n qui modifie un peu le shema.yml et beaucoup le modèle physique qui va en découler.

    Cette modification implique une vue très différente de ce qu'implique ta première question sur les modifications des liaisons. En fait, je pense que cela implique de repenser l'approche de cette partie de l'application. Essentiellement le scénario de modifications (CRUD) des "MetEnOeuvre" sur un "objet".

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut
    En fait, je pense que cela implique de repenser l'approche de cette partie de l'application. Essentiellement le scénario de modifications (CRUD) des "MetEnOeuvre" sur un "objet".
    Qu'entendez-vous par là ? Pour moi la seul différence sera le formulaire embarqué, qui comportera les champs internationalisés.

  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
    Si tu comptes ajouter un commentaire, il faudra l'internationaliser...

    Ce qui implique un form embarqué dans le form embarqué. Ce qui n'est pas viable.

Discussions similaires

  1. [2.x] Relation many-to-many se pointant elle-même dans un schema YAML
    Par Crusider dans le forum Symfony
    Réponses: 1
    Dernier message: 12/06/2014, 15h37
  2. Réponses: 3
    Dernier message: 29/12/2010, 09h55
  3. Réponses: 2
    Dernier message: 19/05/2004, 11h13
  4. changement de type pour un champ dans une table
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 23/02/2004, 16h26
  5. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 07h53

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