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 :

Passage du schema.yml à du SQL qui fontionne


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut Passage du schema.yml à du SQL qui fontionne
    Salut a tous,

    Mon souci c'est qu'a partir d'un shcema.yml a priori bon, j'obtiens des requetes qui ne passeront pas sous phpMyAdmin.
    J'ai basé ma syntaxe la dessus :
    http://www.doctrine-project.org/docu...l-schema-files

    Il n'y a pas tout le code mais seulement celui qui est pertinent pour comprendre l'erreur s'il vous faut le reste du code, demandez moi

    Voici mon 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
     
    detect_relations : true
     
    Salarie: 
      tableName: ic_salarie
      actAs:
        Timestampable : ~ 
      columns: 
        nom : string 
        prenom : string 
        secteur : string 
        historique_id : integer
        groupe_id : integer
      relations: 
        Historique:
          foreignType: one
        Groupe:
          foreignAlias: Salaries
     
     
    CongesATraiter : 
      tableName: ic_congesATraiter
      actAs:
        Timestampable : ~ 
      columns: 
        debut : date
        fin : date 
        duree : integer 
        decisionnaire_id : integer
      relations:
        Decisionnaire:
          foreignAlias : CongesATraiters
        Salarie:
          foreignAlias: CongesATraiters
          class: Salarie
          refClass: SalarieDemandeConges
     
     
    SalarieDemandeConges: 
       tableName: salarieDemandeConges
       actAs:
         Timestampable: ~
       columns: 
         salarie_id : integer
         congesATraiter_id : integer
       relations:
         Salarie:
           foreignAlias : SalarieDemandeCongess 
         CongesATraiter: 
           foreignAlias : SalarieDemandeCongess

    voici les requetes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE ic_congesATraiter (id BIGINT AUTO_INCREMENT, debut DATE, fin DATE, duree BIGINT, decisionnaire_id BIGINT, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX decisionnaire_id_idx (decisionnaire_id), PRIMARY KEY(id)) ENGINE = INNODB;
    CREATE TABLE ic_salarie (id BIGINT AUTO_INCREMENT, nom TEXT, prenom TEXT, secteur TEXT, historique_id BIGINT, groupe_id BIGINT, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX historique_id_idx (historique_id), INDEX groupe_id_idx (groupe_id), PRIMARY KEY(id)) ENGINE = INNODB;
    CREATE TABLE salarieDemandeConges (id BIGINT AUTO_INCREMENT, salarie_id BIGINT, congesatraiter_id BIGINT, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, INDEX salarie_id_idx (salarie_id), INDEX conges_a_traiter_id_idx (conges_a_traiter_id), PRIMARY KEY(id)) ENGINE = INNODB;
    ALTER TABLE ic_congesATraiter ADD CONSTRAINT ic_congesATraiter_decisionnaire_id_ic_decisionnaire_id FOREIGN KEY (decisionnaire_id) REFERENCES ic_decisionnaire(id);
    ALTER TABLE salarieDemandeConges ADD CONSTRAINT salarieDemandeConges_salarie_id_ic_salarie_id FOREIGN KEY (salarie_id) REFERENCES ic_salarie(id);
    ALTER TABLE salarieDemandeConges ADD CONSTRAINT salarieDemandeConges_conges_a_traiter_id_ic_congesATraiter_id FOREIGN KEY (conges_a_traiter_id) REFERENCES ic_congesATraiter(id);
    Et voici l'erreur sous PhpMyAdmin :



    Merci d'avance a ceux qui répondront.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je ne pourrais pas dire pourquoi mais je pense que le nom du champ "congesATraiter_id" le gène.

    Je te suggère d'essayer de le remplacer par "conges_a_traiter_id"

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut
    Effectivement ca le genait, j'ai donc ajouter une ligne de precision indiquant que je voulais utiliser la variable citée dans columns :

    Merci de l'éclairage,

    j'ai donc rémplacé par ceci si certains tombent sur mon probleme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SalarieDemandeConges: 
       tableName: ic_salarieDemandeConges
       actAs:
         Timestampable: ~
       columns: 
         salarie_id : integer
         congesATraiter_id : integer
       relations:
         Salarie:
           foreignAlias : SalarieDemandeCongess 
         CongesATraiter:
           local: congesATraiter_id
           foreignAlias : SalarieDemandeCongess

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ah oui maintenant que tu le dis c'est logique. Quand il essaye de détecter les relations il fait des convertions entre les noms, entre le camel case et et la forme avec underscore.

    Pour une relation CongesATraiter il cherche en effet un conges_a_traiter_id. Chaque majuscule est mise en minuscule et précédée d'un underscore.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut
    Par curiosité, pourquoi cette metamorphose ?
    Pourquoi ne pas obligé l'utilisateur a utiliser directement le mode underscore, et d'où^ vient ce Camel case mode ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je suppose que c'est une norme choisie afin de pouvoir justement détecter les relations.
    Pour pouvoir être capable de détecter quelque chose, d'utiliser la "magie", il faut quand même qu'on y mette un peu du notre et suivre certaines conventions de nommage ^^.

    En déclarant une relation avec un nom X, il fait une transformation dessus et s'attend à trouver une colonne bien nommée correspondante.

    Mais ce n'est nullement obligatoire comme dans ton cas, il suffit dans ce cas de lui indiqué la colonne directement si elle ne suit pas le nommage.

    De plus, ça permet aussi d'avoir toutes les méthodes magiques dans Doctrine.
    Par exemple getUserPicture récupèrera une colonne "user_picture", alors que getUserpicture récupèrera une colonne censée être nommée "userpicture"
    de même pour les findByXXXX etc.


    Beaucoup de ce qu'on dit comme "magique" dans symfony et doctrine est basé sur des conventions de nommage.

Discussions similaires

  1. passage de paramètres à un fichier SQL
    Par philfont dans le forum Administration
    Réponses: 5
    Dernier message: 30/08/2004, 15h01
  2. Réponses: 2
    Dernier message: 04/06/2004, 11h11
  3. Requête SQL qui me bloque
    Par David Guillouet dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/04/2004, 14h52
  4. [Defi] Query SQL qui semble tres simple
    Par Wakko2k dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/04/2004, 10h01
  5. Instruction SQL qui supprime une colonne d'une table
    Par tseg dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/10/2003, 20h47

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