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 :

Modifier un nom de champ via fichier YAML [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 32
    Par défaut Modifier un nom de champ via fichier YAML
    Hello tout le monde,

    je suis un n00b sur doctrine et Symfony, et j'essaie le framework sur un nouveau projet. J'ai réussi à créer mes tables et mes modèles, pas de problème là-dessus.

    J'ai ensuite modifié le nom du champ type_id par type_oeuvres_id dans les relations de la table Oeuvre

    et en relançant build-model, build-sql et insert-sql j'ai le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLSTATE[42000]: Syntax error or access violation: 1072 Key column 'type_oeuvre_id' doesn't exist in table. Failing Query: "ALTER TABLE oeuvre ADD CONSTRAINT oeuvre_type_oeuvre_id_type_oeuvre_id FOREIGN KEY (type_oeuvre_id) REFERENCES type_oeuvre(id)". Failing Query: ALTER TABLE oeuvre ADD CONSTRAINT oeuvre_type_oeuvre_id_type_oeuvre_id FOREIGN KEY (type_oeuvre_id) REFERENCES type_oeuvre(id)
    je ne comprends pas pourquoi...

    Voici le fichier YAML

    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
     
    Artiste:
      actAs: { Timestampable: ~ }
      columns:
        nom: { type: string(255) }
        prenom: { type: string(255) }
        tel: { type: string(255) }
        mail: { type: string(255) }
        rue: { type: string(255) }
        cp: { type: string(255) }
        ville: { type: string(255) }
        modifie_par: { type: integer }
     
    Oeuvre:
      actAs: { Timestampable: ~ }
      columns:
         artiste_id: { type: integer, notnull: true }
         type_oeuvre_id: { type: integer, notnull: true }
         nom: { type: string(255) }
      relations:
          Artiste:
              local: artiste_id
              foreign: id
              foreignAlias: Artistes
          TypeOeuvre:
              local: type_oeuvre_id
              foreign: id
              foreignAlias: TypeOeuvres
     
    TypeOeuvre:
      actAs: { Timestampable: ~ }
      columns:
          nom: { type: string(255) }
    La description d'erreur de la doc MySql ne m'aide pas du tout et je ne trouve pas d'info sur ce genre de manip...

    Help !

  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
    Ci joint le shema.yml 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
    37
    38
    39
    40
    41
    42
    43
     
    artiste:
      actAs:
        Timestampable: ~
      columns:
        nom:            string(255)
        prenom:         string(255)
        tel:            string(255)
        mail:           string(255)
        rue:            string(255)
        cp:             string(255)
        ville:          string(255)
        modifie_par:    integer
      relations:
        oeuvres:
          class:        oeuvre
          local:        id
          foreign:      artiste_id
          foreignAlias: Artiste
     
    oeuvre:
      actAs:
        Timestampable: ~
      columns:
        artiste_id:
          type:         integer
          notnull:      true
        type_oeuvre_id:
          type:         integer
          notnull:      true
        nom:           string(255)
     
    type_oeuvre:
      actAs:
        Timestampable: ~
      columns:
        nom:          string(255)
      relations:
        oeuvres:
          class:      oeuvre
          local:      id
          foreign:    type_oeuvre_id
          foreignAlias: type_oeuvre
    Les corrections :
    • la syntaxe des nom de champs était correcte, mais un peu sur-chargée. Je l'ai juste allégée
    • Il est plus simple, à mon avis, de mettre les relations du côté multiple de la relation 1-n, mais c'est un avis personnel. A noter que l'on peut les mettre de l'autre côté aussi, mais qu'il ne faut en aucun cas la mettre des deux côtés de la relation.
    • Dans "relations", le nom de la relation "oeuvres" au pluriel, va donner la méthode dans l'objet type_oeuvre. On récupèrera pour un objet type_oeuvre toutes les œuvres par $type_oeuvre->getOeuvres() qui retourne un Doctrine_collection de toutes les oeuvres.
    • Dans oeuvre, on récupère son type par $oeuvre->getTypeOeuvre() qui retourne un objet type_oeuvre.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 32
    Par défaut
    merci, ca marche

    par contre quand j'affiche la liste des oeuvres, à la place de l'artiste et du type d'oeuvre, j'ai leur numéro d'id...

    comment est-ce que je peux faire pour afficher leur nom ?

    Et plus généralement, afficher des infos qui ne sont pas contenues dans la table de base du modèle ?

  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
    Citation Envoyé par titiyoyo Voir le message
    par contre quand j'affiche la liste des oeuvres, à la place de l'artiste et du type d'oeuvre, j'ai leur numéro d'id..?
    Je ne suis pas sur de ce que tu veux, mais je pense que si tu modifies ton objet du modèle de la table et lui rajoute une méthode __toString() qui retourne la chaine de caractères que tu souhaites voir afficher tu devrais avoir ta réponse.


    Si par table de base, tu entends la table artiste.

    Imagine que tu as un objet artiste dans une variable $artiste.

    Tu va récupérer la liste des œuvres par :
    $artiste->getOeuvres() qui va te retourner un objet Doctrine_collection avec une collection d'objet oeuvre. On peut donc avoir un code du genre
    foreach $artiste->getOeuvres() as $oeuvre ...

    Et pour un objet $oeuvre, tu peux récupérer le type par $oeuvre->getTypeOeuvre(). Vu que l'on est du côté unique de la relation, on dispose directement d'un objet.

    A noter que chaque demande va générer une requête SQL. Sauf à préparer la requête au préalable, mais ça, c'est la prochaine histoire.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 32
    Par défaut
    j'avance, merci !

    j'ai un dernier point cependant :

    En me basant sur le schema que tu m'as donné, j'essaie de faire une jointure avec la table artiste sans y parvenir.
    J'ai tenté ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      public function executeIndex(sfWebRequest $request)
      {
        $this->oeuvres = Doctrine::getTable('oeuvre')
          ->createQuery('a')
          ->leftJoin('Artiste b')
          ->execute();
      }
    Qu'est-ce que je fais mal ?

  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
    Presque !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      public function executeIndex(sfWebRequest $request)
      {
        $this->oeuvres = Doctrine::getTable('oeuvre')
          ->createQuery('a')
          ->leftJoin('a.Artiste b')
          ->execute();
      }
    Un seul "a" et tout est dépeuplé. A noter que le nom "Artiste" correspond au nom de la relation et pas au nom de la tables. Avoir un artiste (dont l'Id est 4) et ces œuvres donnera !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      public function executeIndex(sfWebRequest $request)
      {
        $this->artiste= Doctrine::getTable('artiste')
          ->createQuery('a')
          ->leftJoin('a.oeuvres o')
          ->where('a.id = ?', 4)
          ->execute();
      }

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

Discussions similaires

  1. [2.x] Modifier les nom des champs dans un formulaire
    Par marwazmandar dans le forum Symfony
    Réponses: 30
    Dernier message: 27/06/2012, 18h23
  2. [Doctrine] Modifier un nom de champ via fichier YAML
    Par titiyoyo dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/06/2010, 21h16
  3. recuperer le nom du champ via une requete
    Par Invité dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/03/2007, 21h32
  4. Modifier les noms des champs sous VBA
    Par shadockgreg dans le forum Access
    Réponses: 2
    Dernier message: 22/09/2006, 17h50
  5. Modifier le nom des champs d'une table...
    Par Mr Capone dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/01/2005, 10h22

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