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 :

Formulaire imbriqués avec relation n-n [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 46
    Par défaut Formulaire imbriqués avec relation n-n
    Bonjour tout le monde,

    je suis entrain de réaliser un formulaire qui permet d'ajouter une instance (table app_instance) et lui associé une ou plusieurs base de données et qui permet de stocker les différents infos dans les 2 tables et aussi dans la table intermédiaire database_instance.

    Sachant que mes tables dans mon MCD sont représentées comme ça :

    app_instance==> 1,n <==database_instance ==> 1,n <== db_database

    Vous trouverez ci-dessous mon schéma.yml, sachant que je j'ai crée mes tables sous phpmyadmin et mon schéma a été généré automatiquement :

    AppInstance:
    connection: doctrine
    tableName: app_instance
    columns:
    id:
    type: integer(4)
    fixed: false
    unsigned: false
    primary: true
    autoincrement: true
    name:
    type: string(20)
    fixed: false
    unsigned: false
    primary: false
    notnull: true
    autoincrement: false
    relations:
    DatabaseInstance:
    local: id
    foreign: app_instance_id
    type: many

    DatabaseInstance:
    connection: doctrine
    tableName: database_instance
    columns:
    db_database_id:
    type: integer(4)
    fixed: false
    unsigned: false
    primary: true
    autoincrement: false
    app_instance_id:
    type: integer(4)
    fixed: false
    unsigned: false
    primary: true
    autoincrement: false
    relations:
    AppInstance:
    local: app_instance_id
    foreign: id
    type: one
    DbDatabase:
    local: db_database_id
    foreign: id
    type: one

    DbDatabase:
    connection: doctrine
    tableName: db_database
    columns:
    id:
    type: integer(4)
    fixed: false
    unsigned: false
    primary: true
    autoincrement: true
    name:
    type: string(20)
    fixed: false
    unsigned: false
    primary: false
    notnull: true
    autoincrement: false
    version:
    type: string(10)
    fixed: false
    unsigned: false
    primary: false
    notnull: true
    autoincrement: false
    relations:
    DatabaseInstance:
    local: id
    foreign: db_database_id
    type: many


    J'essaye d'utiliser les embededform et les embededRelation.
    Je vous remercie par avance de vos idées et suggestions

  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 schéma est illisible ainsi.

    Il y a un excellent sujet qui en parle sur la premier page du forum, avec toutes les informations pour réaliser ce type de montage.

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 46
    Par défaut
    Je vous pris de m’excuser et merci pour l'indication, je suis nouveau sur le forum, donc voilà je pense que c’est plus clair maintenant. Du coup je récapitule, en fait je veux réaliser un formulaire imbriqué qui rassemble les 2 tables app_instance et db_database de relation n-n.

    Je précise que j’ai crée mes tables sous phpMyadmin donc mon schéma je l’ai généré automatiquement depuis ma base crée.

    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
     
    AppInstance:
      connection: doctrine
      tableName: app_instance
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        name:
          type: string(20)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        application_component_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        DatabaseInstance:
          local: id
          foreign: app_instance_id
          type: many
     
    DatabaseInstance:
      connection: doctrine
      tableName: database_instance
      columns:
        db_database_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        app_instance_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
      relations:
        AppInstance:
          local: app_instance_id
          foreign: id
          type: one
        DbDatabase:
          local: db_database_id
          foreign: id
          type: one
     
    DbDatabase:
      connection: doctrine
      tableName: db_database
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        name:
          type: string(20)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        version:
          type: string(10)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        DatabaseInstance:
          local: id
          foreign: db_database_id
          type: many

  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
    Ton schéma nettoyé et configurer pour fonctionner en n-n. En effet, phpMyAdmin n'est pas capable de configurer correctement les objets Doctrines pour qu'ils travaillent en n-n.

    Le fichier schema.yml sert à trois choses :
    • Configurer les tables dans la base de données
    • Configurer les objets du modèle doctrine
    • Configurer les objets à ne pas générer pour symfony (option: symfony: form: false) qui ne servent à rien dans le cas d'une relation n-n


    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
     
    AppInstance:
      tableName: app_instance
      columns:
        name:
          type: string(20)
          notnull: true
        application_component_id: 
    	  type: integer(4)
      relations:
        DbDatabases:
    	  class: DbDatabase
          foreignAlias: AppInstances
          refClass: Suivi
     
    DatabaseInstance:
      tableName: database_instance
      options:
        symfony:
          form: false
          filter: false
      columns:
        db_database_id:
          type: integer (8)
          primary: true
        app_instance_id:
          type: integer (8)
          primary: true
      relations:
        AppInstance:
          foreignAlias: DatabaseInstances
        DbDatabase:
          foreignAlias: DatabaseInstances
     
    DbDatabase:
      tableName: db_database
      columns:
        name:
          type: string(20)
          notnull: true
        version:
          type: string(10)
          notnull: true
    Remarque que :
    • j'ai viré toutes les options par défaut.
    • J'ai viré la définition des clefs id, dans ce cas, doctrine crée automatiquement un id integer (8) auto-incrémenté.
    • J'ai préparé la table DatabaseInstance pour être le pivot de la relation n-n.
    • J'ai configuré la liaison (relation) directe entre les objets du modèle DbDatabase et AppInstance. A partir de là, pour récupérer depuis un objet enregistrement (doctrine_record) $AppInstance tous les DbDatabase, il suffira de faire dans le code : $AppInstance->getDbDatabases() qui retourne une collection d'enregistrement (doctrine_collection). A noter le "s" en fin du get qui indique que l'on va récupérer une collection.

  5. #5
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 46
    Par défaut
    Je te remercie infiniment mimi, j'ai bien modifié mon schéma d'après la structure que tu as présenté, et donc là je teste sur 2 formulaire : DbDatabaseForm et AppInstanceForm
    Et donc quand j'affiche le formulaire "AppInstanceForm", normal il que les champs de la table app_instance, par contre dans le formulaire "DbDatabaseForm", j'ai une liste déroulante qui me permet de choisir une instance, ce qui me permet d'associer une database à une instance et ça marche bien puisque le résultat s'enregistre aussi dans la table intermédiaire, et moi je cherche à faire le contraire donc associer à une instance une database, c'est-a-dire pouvoir saisir ou choisir dans le formulaire "AppInstanceForm" une database.

    EST ce que pour faire cela je dois changer la structure de mon schéma ou ça peut être fait autrement

  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
    Oups

    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
     
    AppInstance:
      tableName: app_instance
      columns:
        name:
          type: string(20)
          notnull: true
        application_component_id: 
    	  type: integer(4)
      relations:
        DbDatabases:
          class: DbDatabase
          foreignAlias: AppInstances
          refClass: Suivi
     
    DatabaseInstance:
      tableName: database_instance
      options:
        symfony:
          form: false
          filter: false
      columns:
        db_database_id:
          type: integer (8)
          primary: true
        app_instance_id:
          type: integer (8)
          primary: true
      relations:
        AppInstance:
          foreignAlias: DatabaseInstances
        DbDatabase:
          foreignAlias: DatabaseInstances
     
    DbDatabase:
      tableName: db_database
      columns:
        name:
          type: string(20)
          notnull: true
        version:
          type: string(10)
          notnull: true
      relations:
        AppInstances:
          class: AppInstance
          foreignAlias: DbDatabases
          refClass: Suivi

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/04/2013, 20h23
  2. [AC-2007] formulaire avec relations N N
    Par primo dans le forum IHM
    Réponses: 7
    Dernier message: 11/01/2010, 18h24
  3. [CS3] Formulaires imbriqués avec conditionnelles
    Par HAbroc dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 12/09/2009, 19h03
  4. formulaire sur tables avec relations
    Par cath2123 dans le forum IHM
    Réponses: 1
    Dernier message: 13/04/2009, 02h15
  5. Réponses: 1
    Dernier message: 15/01/2007, 17h19

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