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 :

[Admin Generator] Modification d'une entrée et clés étrangères [1.x]


Sujet :

Symfony PHP

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut [Admin Generator] Modification d'une entrée et clés étrangères


    J'ai un petit problème avec l'admin generator de symfony (Doctrine).

    Quand j'utilise un panneau entièrement automatique (créé avec la ligne de commande et puis aucune modification) et des clés étrangères (définies dans mon schéma, modèles dont la fonction __toString() a été redéfinie), si je sélectionne un élément dans la liste qui se crée lors de la création d'un nouvel item, il n'est jamais enregistré.

    En code, ça donne :
    schéma
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    table: 
      columns: 
        os: integer
      relations:
        os: 
          foreign: id
          local: os
     
    os: 
      columns: 
        name: string(63)
    generator.yml du module incriminé
    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
    generator:
      class: sfDoctrineGenerator
      param:
        model_class:           table
        theme:                 admin
        non_verbose_templates: true
        with_show:             false
        singular:              ~
        plural:                ~
        route_prefix:          table
        with_doctrine_route:   true
        actions_base_class:    sfActions
     
        config:
          actions: ~
          fields:  ~
          list:    ~
          filter:  ~
          form:    ~
          edit:    ~
          new:     ~
    lib/model/doctrine/os.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class os extends Baseos
    {
    	public function __toString()
    	{
    		return $this->name;
    	}
    }
    Le problème : en essayant d'insérer un nouvel élément dans le module précité, j'ai une liste déroulante pour mes OS mais, peu importe celui que je sélectionne, en cliquant sur Save, cet élément n'ets pas sauvegardé en bdd...

    Aurais-je loupé quelque chose ?


  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Points : 396
    Points
    396
    Par défaut
    Histoire d'être sûr de comprendre le problème :
    dans ton formulaire de création (new), lorsque tu entres les informations et clique sur Save, tout s'enregistre en base de données sauf l'id de ta clé étrangère "os" ?

    Remarque : attention à tes définitions dans ton schema.yml. "os" correspond à :
    - ton objet "os" ;
    - ton id dans "table" ;
    - ton nom de relation.

    Ca peut éventuellement amener à des conflits. En tout cas, ça amènera forcément tôt ou tard à des erreurs ! Mieux vaut les renommer en : os, os_id et Os.

    (t'as le droit de créer une table du nom "table" ?)

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    Citation Envoyé par bilbonec Voir le message
    Histoire d'être sûr de comprendre le problème :
    dans ton formulaire de création (new), lorsque tu entres les informations et clique sur Save, tout s'enregistre en base de données sauf l'id de ta clé étrangère "os" ?
    Exact.

    Citation Envoyé par bilbonec Voir le message
    Ca peut éventuellement amener à des conflits. En tout cas, ça amènera forcément tôt ou tard à des erreurs ! Mieux vaut les renommer en : os, os_id et Os.
    Je tente ça et je te dis quoi . Quand on utilise une option pour mettre les relations automatiquement, ça ne génère pas des noms dans ce genre-là ?

    Citation Envoyé par bilbonec Voir le message
    (t'as le droit de créer une table du nom "table" ?)
    En fait, c'est plus pour l'exemple, j'ai changé le nom de la table, je n'ai jamais testé ce schéma précisément (ne sachant pas précisément ce que je peux mettre en public ou non, je préfère anonymiser un minimum).


  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Ton schéma tel que je l'aurais écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    table: 
      columns: 
        os_id: integer
      relations:
        os: 
          foreignAlias: tables
     
    os: 
      columns: 
        name: string(63)
    <nomDeTable>_id est le nom par défaut pour une clef extérieur.

    ForeignAlias est le nom de la liaison de l'autre côté, donc pour avoir les tables liées depuis un objet os, on va avoir : $os->tables() qui va retourner un doctrine_collection.

    Pour ton problème spécifique, et avec ton schéma comme le miens, il est fonctionnel, à la condition de rajouter un champs à la table table, pour que cela soit viable (dans la liste).

    Je pense donc qu'il y a des chances que ton problèmes vienne du schéma (plus particulièrement des relations), donc MP si tu ne veux pas l'afficher.

    Ta procédure décrite est "parfaite".

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    J'ai d'abord essayé de changer le nom de la colonne os en os_id, dans mon schéma et dans ma base de données MySQL. Le problème, c'ets que mon application symfony me renvoie toujours des erreurs 502 (d'autres applications sur le même serveur, SQL compris, fonctionnent parfaitement pendant ce temps, sans utiliser la table incriminée ; en "oubliant" une des deux parties, j'ai bien des erreurs de la part de Doctrine comme quoi il y a un truc qui va pas - colonne manquante). Je ne parle ici que de la partie Admin Generator, tous caches vidés, avec le contrôleur de développement.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Points : 396
    Points
    396
    Par défaut
    J'ai d'abord essayé de changer le nom de la colonne os en os_id, dans mon schéma et dans ma base de données MySQL
    Pourquoi tu le changes dans ta DB ? Elle n'est pas censée être régénérée par Doctrine ?

    Sinon, je ne connais pas exactement tout ce qui est déduit par Doctrine en respectant les règles de nommage (comme l'id utilisé depuis le nom de la relation, qui, je crois, doit posséder une majuscule), du coup je préfère en général être un peu plus verbeux pour éviter les erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    table: 
      columns: 
        os_id: integer
      relations:
        Os:
          class: os
          local: os_id
          foreign: id
          foreignAlias: Tables
    Peut-être ton erreur vient-elle de là.

  7. #7
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Je pense que tu n'as pas régénéré le modèle objet. D'où l'erreur.

    Si tu travail le shema.yml la règle n°1 est, jamais d'intervention sur la structure dans la base de données.

    Essaye de faire dans le CLI un symfony doctrine:build --all
    et cela devrait s'arranger.

    Le shema.yml est autant la définition du schéma des données que celui des objets du modèles de l'ORM Doctrine. L'un ne va pas sans l'autre et tous doivent être au même niveau pour fonctionner.

  8. #8
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    Citation Envoyé par bilbonec Voir le message
    Pourquoi tu le changes dans ta DB ? Elle n'est pas censée être régénérée par Doctrine ?
    Le problème, c'est que je n'ai pas d'accès en SSH au serveur, ce qui réduit mes possibilités d'action (vive le mutualisé, avec seulement un accès FTP et HTTP ). Donc je dois reporter les modifications du SQL généré sur ma base de données à la main (vu que je n'arrive pas non plus à me connecter au serveur SQL depuis ma machine)...

    Citation Envoyé par Michel Rotta Voir le message
    Je pense que tu n'as pas régénéré le modèle objet. D'où l'erreur.
    J'ai pourtant effectué du symfony doctrine:build --all et vidé puis réuploadé tout mon dossier lib (avec le fichier de schéma YAML).

  9. #9
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Si je comprend bien, tu développes en local et exploite chez un hébergeur.

    Question, en local, cela donne quoi ?


    J'ai trouvé un article pour une distribution sur un serveur hébergé qui prendrait en compte les commandes CLI, pas testé, pas vérifié (la sécurité).

  10. #10
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Question, en local, cela donne quoi ?
    Pour ne pas installer un MySQL en local, j'ai utilisé SQLite pour les tests (ce qui ne devrait normalement pas trop changer la donne). Et symfony 1.4.8 me renvoie une erreur 502 quand j'accède à cette page (serveur IIS configuré en local) et fonctionne parfaitement pour les pages n'utilisant pas cette table, c'est-à-dire exactement comme déployé...

    Citation Envoyé par Michel Rotta Voir le message
    J'ai trouvé un article pour une distribution sur un serveur hébergé qui prendrait en compte les commandes CLI, pas testé, pas vérifié (la sécurité).
    Le problème, c'est que je n'ai aucun accès autre qu'en FTP, donc pas de SSH .

  11. #11
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    Donc serveur de production en windows avec IIS et MySql (pourquoi pas un Sql Serveur ?)

    Vu que tu as l'erreur en local et avec une autre base de données, nous avons un indice important. Le problème n'est pas lié à la base de donnée, ni à sa structure (je suppose que le SqLite en local est généré par un build de symfony).

    Donc l'erreur est dans le modèle, soit dans le shema.yml, soit dans des méthodes des objets du modèle (as-tu rajoutés des méthodes perso dans les objets du modèle), soit d'autre chose (là, c'est moins gagné ). Par contre, il va me falloir plus de données précise sur tes structures et ta base, travailler sur des vues de l'esprit, à ce niveau, ne sera plus possible.

    Envoie la structure par MP éventuellement, je garanti ma total discrétion.

  12. #12
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Donc serveur de production en windows avec IIS et MySql (pourquoi pas un Sql Serveur ?)
    En local, c'est du IIS/SQLite ; en prod, du Apache sous nunux.

    Finalement, j'ai modifié mon schéma comme suit et ça fonctionne parfaitement (désolé de ne pas avoir essayé ça plus tôt, il n'y a que maintenant que je peux vraiment m'octroyer du temps pour travailler là-dessus...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    table: 
      columns: 
        os: integer
      relations:
        Os: 
          foreign: id
          local: os
          class: os
     
    os: 
      columns: 
        name: string(63)
    Ça ressemble donc bien à un conflit entre les relations et la colonne. (Maintenant, pour les bizarreries qui se passaient avec les autres modifications, on va les passer sous silence vu que ça fonctionne comme ça...).

    à vous deux !

  13. #13
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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
    Points : 8 486
    Points
    8 486
    Par défaut
    C'est pour cela que j'écris toujours tout en minuscule dans les shema.yml...

    Faut que je troue du temps (encore !) pour faire un bout de faq sur l'écriture des shema.yml pour doctrine.

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

Discussions similaires

  1. [1.x] admin generator - changer dynamiquement une classe
    Par phpestpuissant dans le forum Symfony
    Réponses: 1
    Dernier message: 20/03/2012, 10h28
  2. Réponses: 3
    Dernier message: 06/12/2010, 21h13
  3. Bug a la modification d'une entrée dans table
    Par porci82 dans le forum VBA Access
    Réponses: 1
    Dernier message: 20/06/2007, 15h28
  4. VBA : modification d'une entrée dans une table
    Par Thibaut_Dupont dans le forum Access
    Réponses: 6
    Dernier message: 13/07/2006, 16h24
  5. [SQL] pb de modification d'une entrée de ma bd
    Par auryn111 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/09/2005, 11h54

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