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 :

Formulaire de création pour table Association


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut Formulaire de création pour table Association
    Bonjour,

    J'ai un petit soucis au moment de la création avec un formulaire pourtant sur une table association (Deux clés étrangères pour clé primaire)

    elle est formé en gros comme ca

    table : RendezVous
    clé primaire : candidat_id, offre_id
    var1
    var2
    ...

    Donc j'utilise le formulaire généré automatique par Symfony
    le problème c'est qu'au moment de la validation il me met :
    * Candidat: Cette zone n'est pas valide : 12
    * Offre: Cette zone n'est pas valide : 42
    (les valeurs sont bonnes)

    J'ai comme l'impression que ca vient de ce morceau de code présent dans RendezVousFormBase.class :
    new sfValidatorChoice(array('choices' => array($this->getObject()->get('candidat_id')), 'empty_value' => $this->getObject()->get('candidat_id'), 'required' => false)),


    En gros j'ai l'impression qu'il cherche les différentes valeurs possible pour candidat_id (et offre_id) dans la table Rendez-Vous alors qu'il devrait les chercher dans la table Candidat?
    Je voit pas comment lui dire d'aller chercher dans la bonne table

    (A moins que je me plante sur l'origine de l'erreur )

    Merci d'avance pour vos réponses

  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 suis d'accord avec toi sur l'erreur "visuel". Mais pas sur la cause.

    Je pense que le shema.yml n'est pas bon. Peux-tu le mettre ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut
    Ça c'est fort possible que j'ai fait une erreur au niveau du schéma


    voila les Trois tables qui nous intéressent :

    Rendez-Vous :
    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
    INADEQUATIONRENDEZVOUS:
      connection: doctrine
      tableName: INADEQUATIONRENDEZVOUS
      columns:
        candidat_id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
        offre_id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
        numtel:
          notnull: true
          type: string(10)
          fixed: false
          unsigned: false
          primary: false
        date_RV1:
          notnull: true
          type: timestamp(7)
          fixed: false
          unsigned: false
          primary: false
        date_RV2:
          notnull: true
          type: timestamp(7)
          fixed: false
          unsigned: false
          primary: false
        date_RV3:
          notnull: false
          type: timestamp(7)
          fixed: false
          unsigned: false
          primary: false
        email:
          notnull: false
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
      relations:
        INADEQUATIONCANDIDAT:
          local: candidat_id
          foreign: id
          type: one
        INADEQUATIONOFFRE:
          local: offre_id
          foreign: id
          type: one
    Offre
    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
    INADEQUATIONOFFRE:
      connection: doctrine
      tableName: INADEQUATIONOFFRE
      columns:
        id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          sequence: true
        intitule:
          notnull: true
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
        salaire:
          notnull: true
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
        contrat:
          notnull: true
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
        metier:
          notnull: true
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
        descriptif:
          notnull: true
          type: string(1024)
          fixed: false
          unsigned: false
          primary: false
        typehoraire:
          notnull: true
          type: string(1024)
          fixed: false
          unsigned: false
          primary: false
        entreprise_id:
          notnull: true
          type: integer(8)
          fixed: false
          unsigned: false
          primary: false
        adresse_id:
          notnull: true
          type: integer(8)
          fixed: false
          unsigned: false
          primary: false
        habilete_id1:
          notnull: true
          type: integer(8)
          fixed: false
          unsigned: false
          primary: false
        habilete_id2:
          notnull: true
          type: integer(8)
          fixed: false
          unsigned: false
          primary: false
        habilete_id3:
          notnull: true
          type: integer(8)
          fixed: false
          unsigned: false
          primary: false
        valider:
          notnull: true
          type: string(8)
          fixed: false
          primary: false
        pourvue:
          notnull: true
          type: string(8)
          fixed: false
          primary: false
        supprimer:
          notnull: true
          type: string(8)
          fixed: false
          primary: false
      relations:
        INADEQUATIONENTREPRISE:
          local: entreprise_id
          foreign: id
          type: one
        INADEQUATIONADRESSE:
          local: adresse_id
          foreign: id
          type: one
          alias: adresse_offre
        INADEQUATIONHABILETE:
          local: habilete_id1
          foreign: id
          type: one
        INADEQUATIONHABILETE_4:
          class: INADEQUATIONHABILETE
          local: habilete_id2
          foreign: id
          type: one
        INADEQUATIONHABILETE_5:
          class: INADEQUATIONHABILETE
          local: habilete_id3
          foreign: id
          type: one
        INADEQUATIONRENDEZVOUS:
          local: id
          foreign : offre_id
          type : many
        INADEQUATIONQUESTION:
          local: id
          foreign: offre_id
          type: many
        INADEQUATIONPOSTULER:
          local: id
          foreign: offre_id
          alias: postu
          type: many
        INADEQUATIONREPONDRE:
          local: id
          foreign: offre_id
          alias: rep
          type: many
    Candidat
    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
     
    INADEQUATIONCANDIDAT:
      connection: doctrine
      tableName: INADEQUATIONCANDIDAT
      columns:
        id:
          type: integer(8)
          fixed: false
          unsigned: false
          primary: true
          sequence: true
        prenom:
          notnull: true
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
        nom:
          notnull: true
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
        login:
          notnull: true
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
        mdp:
          notnull: true
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
        datenaiss:
          notnull: true
          type: timestamp(7)
          fixed: false
          unsigned: false
          primary: false
        email:
          notnull: true
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
        adresse_id:
          notnull: true
          type: integer(8)
          fixed: false
          unsigned: false
          primary: false
      relations:
        INADEQUATIONADRESSE:
          local: adresse_id
          foreign: id
          type: one
          alias: adresse_cand
        INADEQUATIONRENDEZVOUS:
          local: id
          foreign : offre_id
          type : many
        INADEQUATIONPOSTULER:
          local: id
          foreign: candidat_id
          type: many
        INADEQUATIONREPONDRE:
          local: id
          foreign: candidat_id
          type: many
        INADEQUATIONENREGISTRER:
          local: id
          foreign: candidat_id
          type: many


    Quand tu a fait mention du shema.yml, je l'ai regardé encore une fois. J'avais , en effet,oublié de mettre la relation Rendezvous dans l'offre et le candidat mais malheureusement après rechargement des modèles/sql/formulaires, ca n'a rien changé

  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
    Le schéma revu "a ma façon" :
    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
    RendezVous:
      connection: doctrine
      tableName: INADEQUATIONRENDEZVOUS
      columns:
        candidat_id:
          type: integer(8)
          primary: true
        offre_id:
          type: integer(8)
          primary: true
        numtel:
          notnull: true
          type: string(10)
        date_RV1:
          notnull: true
          type: timestamp(7)
        date_RV2:
          notnull: true
          type: timestamp(7)
        date_RV3:
          type: timestamp(7)
        email:
          type: string(255)
      relations:
        Candidat:
          foreignAlias: RendezVouss
        Offre:
          foreignAlias: RendezVouss
     
    Offre:
      connection: doctrine
      tableName: INADEQUATIONOFFRE
      columns:
        id:
          type: integer(8)
          primary: true
          sequence: true
        intitule:
          notnull: true
          type: string(255)
        salaire:
          notnull: true
          type: string(255)
        contrat:
          notnull: true
          type: string(255)
        metier:
          notnull: true
          type: string(255)
        descriptif:
          notnull: true
          type: string(1024)
        typehoraire:
          notnull: true
          type: string(1024)
        entreprise_id:
          notnull: true
          type: integer(8)
        adresse_id:
          notnull: true
          type: integer(8)
        habilete_id1:
          notnull: true
          type: integer(8)
        habilete_id2:
          notnull: true
          type: integer(8)
        habilete_id3:
          notnull: true
          type: integer(8)
        valider:
          notnull: true
          type: string(8)
        pourvue:
          notnull: true
          type: string(8)
        supprimer:
          notnull: true
          type: string(8)
      relations:
        Entreprise:
          foreignAlias: Offres
        Adresse:
          foreignAlias: Offres
        Habilite1:
          class: Habilete
          local: habilete_id1
          foreign: id
          foreignAlias: Offres1
        Habilite2:
          class: Habilete
          local: habilete_id2
          foreign: id
          foreignAlias: Offres2
        Habilite3:
          class: Habilete
          local: habilete_id3
          foreign: id
          foreignAlias: Offres3
     
    Candidat:
      connection: doctrine
      tableName: INADEQUATIONCANDIDAT
      columns:
        id:
          type: integer(8)
          primary: true
          sequence: true
        prenom:
          notnull: true
          type: string(255)
        nom:
          notnull: true
          type: string(255)
        login:
          notnull: true
          type: string(255)
        mdp:
          notnull: true
          type: string(255)
        datenaiss:
          notnull: true
          type: timestamp(7)
        email:
          notnull: true
          type: string(255)
        adresse_id:
          notnull: true
          type: integer(8)
      relations:
        Adresse:
          foreignAlias: Condidats
        Offres:
          class: Offre
          refClass: RendezVous
          foreignAlias: Candidats
    Dans les remarques :
    • Ne pas inscrire les paramètres par défaut.
    • Alléger les noms des classes (ce qui ne change pas les nom des tables, quoique je rajouterais un "_" soit INADEQUATIONCANDIDAT --> INADEQUATION_CANDIDAT mais ce n'est qu'une préférence personnel.
    • Les relations ne sont définies que sur un côté des relations 1-n, côté 1.
    • Pas de "s" à la fin d'un nom de classe. Ce qui pose un problème pour RendezVous... D'où le nom de la liaison : RendezVouss avec deux "s" pour marquer le fait que la méthode getRendezVouss des objets Offre et Candidats retourne une collection.


    Le reste des changements devrait suivre cet exemple. N'hésite pas à poser des questions.

    Toujours ce rappeler que le shema.yml est important et doit d'abord refléter le modèle objet avant de refléter la base.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut
    en fait, à la base, le schéma est généré automatiquement de ma base oracle (je sais que normalement vaut mieux fait l'inverse mais quand j'ai commencé a dev en symfony j'avais déjà la base) et les rajouts du type Rendez-Vous ont, du coup, été fait sur le même modèle que celui généré d'oracle.

    La je t'ai mis que les 3 tables concernée, mais j'en ai pas mal et j'ai une certaine contrainte de temps . Du coup, je me suis concentré à refaire les liens entre les tables comme tu me la montrer. Malheureusement... J'ai toujours la même erreur . J'ai regarder dans le modèle RendezVousbase.class et il définit les clés étrangères ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function setUp()
        {
            parent::setUp();
            $this->hasOne('INADEQUATIONCANDIDAT', array(
                 'local' => 'candidat_id',
                 'foreign' => 'id'));
     
            $this->hasOne('INADEQUATIONOFFRE', array(
                 'local' => 'offre_id',
                 'foreign' => 'id'));
        }
    Sur le coup ca me semble bon, pourtant à la génération du formulaire (il se base bien la dessus?) bin... raté.

    Mais merci pour les conseils pour le schéma, la prochaine fois je le ferait correctement par ce que c'est vrai que le mien est pas très lisible du coup

  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
    Ce type de problème est le plus souvent dû à une non compréhension par symfony du shema et des relations.

    Tu montre ce qu'il y a pour rendezVous mais qu'y a-t-il de l'autre côté dans les objets candidat et offre ?


    Il est aussi possible qu'il n'arrive pas ou ne veuille pas modifier les form une fois créé. Essaye de vider le dossier lib/form/doctrine/base et de re générer le tout.

Discussions similaires

  1. Problème macro pour table association
    Par aidada dans le forum Macros Access
    Réponses: 3
    Dernier message: 13/05/2014, 10h58
  2. Création tables pour une association d'élèves
    Par cedric74500 dans le forum Modélisation
    Réponses: 15
    Dernier message: 29/07/2013, 13h19
  3. Réponses: 4
    Dernier message: 12/03/2007, 11h48
  4. Requete sql pour création de table dans une base access
    Par Ben156 dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/01/2006, 22h12
  5. Réponses: 9
    Dernier message: 17/11/2005, 14h58

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