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

Symfony PHP Discussion :

Remplir une table de liaison de facon agréable


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 72
    Par défaut Remplir une table de liaison de facon agréable
    Bonjour,

    Je me casse la tete depuis quelques jours pour remplir une table de liaison de facon ergonomique.

    Mon MLD :
    Entreprises : id, nom, adresse...
    Personnes: id, nom, prenom...
    Employer: entreprises_id, personnes_id, poste, telephone, date

    Pour le moment, j'étais parti sur un MultiSelect Drag n' Drop que je mettais dans ma page entreprise et dans ma page personne.

    Mon problème est comment remplir les champs poste, telephone et date sans passer par un 3ème formulaire ?!

    Si des personnes ont des idées...

    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
    C'est le cas classique des liaison n-n avec des arguments sur le liens..
    A mon avis la meilleur solution, mais pas la plus simple à mettre en œuvre passe par des embedForm. Voir, si le nombre de liaison est important, par un module dédié à la table de liaison.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 72
    Par défaut
    J'ai essayé avec l'embedForm (que je trouve plus simple a config qu'un embedRelation).

    Le probleme c'est si je veux ajouter plusieurs employés à mon entreprise que je suis en train de creer (les employés étant déjà créer)

    J'ai un module pour chaque table mais je ne vois pas ce que tu veux dire par : "par un module dédié à la table de liaison"

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Par défaut
    Ton module pour la table employé fonctionne ? Car normalement il devrait pas aimer le fait qu'il y ait deux clés primaires, dis moi si dans ton cas ça marche. J'en serai bien surpris

    Après pour rajouter des employés à ton entreprise, ou en créer de nouveaux, c'est pas si simple, ce que j'avais fais pour un autre cas c'était de pouvoir sélectionner ceux qui étaient déjà créés, et de compléter les champs manquant.

    Voir mon post ici

    En créer de nouveaux ça doit pouvoir se faire, je devais me plonger dans le code d'un plugin pour voir un peu comment ils avaient commencés quelque chose de similaire pour des relations un à plusieurs sur le plugin ahDoctrineEasyEmbeddedRelationsPlugin, mais faute de temps, j'ai reporté.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 72
    Par défaut
    Alors sur cette laision, l'index ne fonctionne pas et pour l'ajout je ne vois que mes champs pas mes clef etrangeres !

    La, avec des collègues ont a mis en place une suite d'etape.
    Sur ma page entreprise on a un bouton "envoyer" et un bouton "ajouter employé".

    Plutot, j'ai testé le multiselect qui est tres bien pour une table de liaison qui n'a pas de propriétés associées.
    Je me demandais si ce n'était pas possible d'ajouter un formulaire lors du multi select soit avec du ajax (qui appelerait notre formulaire php) ou un embedForm dans notre multiselect.

  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
    Juste à titre de contrôle, peux-tu mettre ton shema.yml que j'y jette un œil, la configuration du n-n n'est pas nécessairement naturel.

    Il y a un plugin qui permet de faciliter les embed... regarde si ahDoctrineEasyEmbeddedRelationsPlugin ne peux pas d'aider dans ta démarche.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 72
    Par défaut
    mon fichier schema.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
    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
    90
    91
    92
     
    Employer:
      connection: doctrine
      tableName: Employer
      columns:
        id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        entreprises_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        personnes_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        poste:
          type: string(45)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        telephone:
          type: string(10)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        Entreprises:
          local: entreprises_id
          foreign: id
          type: one
        Personnes:
          local: personnes_id
          foreign: id
          type: one
    Entreprises:
      connection: doctrine
      tableName: Entreprises
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        nom:
          type: string(50)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        Employer:
          local: id
          foreign: entreprises_id
          type: many
    Personnes:
      connection: doctrine
      tableName: Personnes
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        nom:
          type: string(50)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        Employer:
          local: id
          foreign: personnes_id
          type: many
    Je te l'ai simplié car il est trop long sinon.
    (je precise aussi que je ne l'ai pas configurer pour le multiselect là.

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Par défaut
    Dans ta table Employe tu as définies trois clés primaires, ça ne fonctionne pas ainsi, si tu rajoutes une colonne id tu ne pourras plus avoir de liaisons uniques. Par exemple la ligne id=1, individu=2, entreprise=3 et id=3, individu=2, entreprise=3, on va pointer sur la même chose, il faut déjà supprimer la colonne id.

    Pour faire fonctionner le module employer ensuite, il faut modifier dans le fichier app/backend/config/routing.yml, l'emplacement de la route correspondant à ton module, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    employer:
      class: sfDoctrineRouteCollection
      options:
        model:                Employer
        module:               employer
        prefix_path:          /employer
        column:               personnes_id/:entreprises_id    #de cette manière ça fonctionnera
        with_wildcard_routes: true
    Et le plugin ahDoctrineEasyEmbeddedRelationsPlugin ne gère pas les relations n-n hélas, d'après le développeur j'avais lu qu'il y avait un bug dans Symfony sur les appels des méthodes save et doSave de Symfony.

  9. #9
    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 même revu corrigé et simplifié.

    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
     
    employer:
      tableName: employer
      columns:
        entreprises_id:
          type: integer
          notnull: true
        personnes_id:
          type: integer
          notnull: true
        poste:
          type: string(45)
        telephone:
          type: string(10)
      relations:
        entreprise:
           local: entreprises_id
           foreign: id
           foreignAlias: employers
        personne:
           local: personne_id
           foreign: id
           foreignAlias: employers
     
    entreprise:
      tableName: entreprises
      columns:
        nom:
          type: string(50)
          notnull: true
     
    personne:
      tableName: personnes
      columns:
        nom:
          type: string(50)
          notnull: true
    Plus de colonnes id, doctrine les mets seul
    Tous les nom de table sans majuscule et sans "S" !
    Les variables par défaut n'ont pas à être renseignées, elles alourdissent le schéma pour rien.
    Les relations ne doivent être définies que d'un côté de la relation, les informations pour l'autre côté sont définie par "foreign".
    La connexion n'a d'intérêt que s'il y a plusieurs connections possibles
    Le type de relation par défaut est 1-n, il n'est donc pas nécessaire de le préciser.

    Si la table employer n'est et ne doit être référencé par aucune table, si de plus, la table entreprise doit régulièrement avoir accès à la table personne sans passer par employer, il est possible de définir une liaison directe, mais, à mon avis, ici, ce n'est pas le cas.

    Le schéma consolidé et validé devrait, peut-être, limité les erreurs liées à des effets de bord.


    Je pense que le plugin que je t'ain indiqué devrait te permettre de créer des choses simples et rapides.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 72
    Par défaut
    Bon pour la les 3 clef primaire dans ma table employer c'est une erreure (J'avais testé un tuto pour embedForm et il demandé une clef primaire mais le resultat ne convenait pas.) Je vous ai mis l'ancienne partie de la table...

    Concernant les conventions de nommage, je me prends souvent la tete avec mes amis dev. (je suis DBA de formation, certifié SQL Expert Oracle il y a 2 ans ).

    Si mes souvenir et mes fiches de révisions sont bonnes, il est recommandé de mettre un S a la fin du nom des tables (Il y a plusieurs objets dans ta table). Je sais que vous (les dev.) vous allez me dire oui mais une table est une instance de mon objet donc pas de S !

    Concernant les maj pour les tables, il n'y a pas de vrai norme. D'apres Oracle tout doit rester cohérant. Dans mon livre de certif il mettait des Maj en premiere lettre.

    Bon, grace a vous, je viens de me replonger dans mes fiches et j'avais oublié que je devais mettre un T_EMPLOYER. Le T_ correspondant à table, V_ pour vue...

    Je ne laisse pas non plus Doctrine (ou symfony) me mettre les clefs primaires, il me met des BIGINT partout !

    Bon je vais testé le plugin et je vous tiens au courant

    Merci en tout cas et si vous avez des infos sur les convention de nommage, je suis preneur mais pas de la doc de zend ou symfony

  11. #11
    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
    Dans le shema.yml, on peut distinguer le nom des objets et le nom physique des tables. Je dirais, vulgairement, que : "je me fous du nom des tables" tant que les objets ne prennent pas de "s", même au singulier.

    Si non, il devient difficile de s'y retrouver au niveau des liaisons et de doctrine. Après, c'est pas moi qui vais coder l'application.

    Oui, il met des bigint partout. Ce qui, en soit, n'est pas gênant. Soit la table est petite et la perte en place négligeable, soit la table est très grande et le int ne suffira pas. Pour m'être déjà trouvé avec une application qui approchait le mas de 43... enregistrements (dans une table cyclique mais où tous n'étaient pas effacé vu leur durée de vie... Un peu la panique.) Je préfère le bigint,

    Mais j'avoue que sur un projet que j'ai en tête, il va me couter plusieurs giga et qu'il va falloir trouver une autre solution.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 72
    Par défaut
    Merci spike2 pour l'astuce de la route a modifié ça m'a pas mal aidé.

    mimi68 : Ton plugin ahDoctrineEasyEmbeddedRelationsPlugin ne correspond pas a ce que je cherche. Néanmoins, je vais l'utiliser pour un autre projet

    Du coup je vais rester sur ma premiere idée.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut
    Bonjour,
    J'ai un problème dans l'imbriquation de formulaire que j'expose ICI. Je vois que certaines personnes se sont déjà penché sur le sujet...Es ce qu'il y a des retours concluant à l'utilisation de ahDoctrineEasyEmbeddedRelationsPlugin?
    Personnellement, je n'arrive pas à supprimer et ajouter des enregistrements...il n'y a que les mises à jours qui fonctionne ...

Discussions similaires

  1. Remplir une Table avec 2 tables
    Par Titouf dans le forum Oracle
    Réponses: 4
    Dernier message: 03/11/2005, 09h35
  2. comment remplir une table
    Par donny dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/07/2005, 11h22
  3. remplir une table en fonction des résultats
    Par Psychomantis dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/10/2004, 12h22
  4. [SWT] Comment remplir une Table ?
    Par simon77 dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 23/08/2004, 10h31
  5. remplir une table avec UTL_FILE.GET_LINE
    Par delphim dans le forum SQL
    Réponses: 9
    Dernier message: 12/03/2004, 10h15

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