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 :

Questions liées au getRelatedModelName() [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 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 32
    Par défaut Questions liées au getRelatedModelName()
    Bonjour.

    Dans mon admin générée, sur un module Campain, j'ai un champ formulaire idTemplate lié par une relation à l'objet Template. La relation s'est bien produit, et dans ma classe Base du formulaire, il m'a généré par défaut un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->setWidgets(array('idTemplate' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('idTemplate'), 'add_empty' => true))));
    Sauf que cette méthode récupère l'ID de la relation (logique, puisque c'est avec cette colonne qu'elle est liée )

    Mais serait-il possible d'afficher dans ce FormChoice une colonne différente de mon modèle "related" ? (dans ce cas ci, le nom du template serait plus intuitif que son ID).

    Merci de votre aide !

  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
    J'ai pas compris le début de la question "module Campain" entre autre, mais j'ai la réponse

    Une question classique sur le forum.

    Dans l'objet du modèle <table>.class.php tu crées une méthode __toString() qui retourne la valeur que tu veux afficher dans ta liste.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 32
    Par défaut
    Bonjour, Alors le module Campain, c'est tout simplement le nom du module généré via un modèle Doctrine... Désolé si je suis pas très clair.

    Vous avez répondu à ma question, merci beaucoup, j'ai été voir la fonction __toString() de sfDoctrineRecord et il suffisait de mettre le nom 'name' dans ma base de donné pour le champ que je veux, et il le fait automatiquement.

    Autre question, toutes mes champs de formulaires qui sont générés via le widget sfWidgetFormDoctrineChoice ne sont pas enregistrés dans la base de données (idUser et idTemplate)... Où dois-je regarder ? Je suis un peu perdu là...

    Merci pour votre aide

  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
    J'ai du mal a comprendre.

    D'où vient le idUser ? Tu ne stocke pas les données Utilisateur dans la base ???

    Attention pour les noms de champs, symfony (en fait doctrine, l'ORM embarqué) utilise le champ id pour l'id unique d'un champ et <table>_id pour le champ clef de relation pour la table <table> dans une autre table.

    Revenons à nos moutons, où sont stockées les données utilisateur ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 32
    Par défaut
    Bonjour

    Alors, les données utilisateurs sont stockées dans sfGuardUser, en vue d'être étendu avec sfGuardUserProfile (si ma mémoire ne me fait pas défaut).

    idUser est le nom de ma relation, si il est ainsi, c'est qu'auparavent ils étaient stockées dans la table User et j'ai pour habitude de gérer les relations comme ça <fk><Table>. Peut être je fait une erreur ? Dois-je m'habituer à utiliser cette syntaxe = <table>_id ?

    Quand je dis qu'elles ne sont pas enregistrées dans la base, c'est que lorsque je valide mon formulaire, les données du sfWidgetFormDoctrineChoice (soit dans mon cas idUser et idTemplate) ne sont pas pris en compte... Tout le reste fonctionne correctement.

    Me suis-je exprimé clairement ? Voici des extraits de mon shema.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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Campain:
      actAs:
        Timestampable:
          created:
            name: created_at
            type: timestamp
          updated:
            name: updated_at
            type: timestamp
      columns:
        id:
          type: integer(4)
          primary: true
          notnull: true
          autoincrement: true
        name:
          type: string(45)
        idUser:
          type: integer(4)
        idTemplate:
          type: integer(4)
        created_at:
          type: timestamp
        updated_at:
          type: timestamp
        expires_at:
          type: timestamp
      relations:
        idUser:
          class: sfGuardUser
          local: idUser
          foreign: id
          foreignAlias: Users
        idTemplate:
          class: Template
          type: integer(4)
          local: idTemplate
          foreign: id
          foreignAlias: Templates
     
    Template:
      columns:
        id:
          type: integer(4)
          primary: true
          notnull: true
          autoincrement: true
        name:
          type: string(45)
        idUser:
          type: integer(4)
        text:
          type: clob(65535)
      relations:
        idUser:
          class: sfGuardUser
          local: idUser
          foreign: id
          foreignAlias: Templates
    Merci !

  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
    Le schéma revu à ma sauce
    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
     
    Campain:
      actAs:
        Timestampable:
      columns:
        name:
          type: string(45)
        user_id:
          type: integer(8)
        template_id:
          type: integer(8)
        expires_at:
          type: timestamp
      relations:
        User:
          class: sfGuardUser
          local: user_id
          foreignAlias: Campains
        Template:
          class: Template
          local: template_id
          foreignAlias: Campains
     
    Template:
      columns:
        name:
          type: string(45)
    #    user_id:
    #      type: integer(8)
        text:
          type: clob(65535)
    • Timestampable crée les deux champs par défaut, il n'est pas nécessaire de les lui redemander.
    • Symfony (doctrine) crée automatiquement les champs Id si aucune clef primaire n'a été déclarée.
    • user_id plutôt que idUser, symfony présume que les clefs sont de cette forme. Les clefs par défaut sont en integer(8) (pour sfGuard il faudrait vérifier ce n'est pas évident).
    • template_id idem à user_id
    • create_at, update_at sont créé automatiquement par le actAs
    • Relation avec sfGuardUser : Le nom de la relation donne le nom de la fonction get, ici on aura dans l'objet Campain un getUser() (un utilisateur par Campain, foreignAlias est le nom du côté de l'objet sfGuardUser
    • Relation avec Template, idem.
    • Pour les deux relations le champ local pourrait aussi être laissé à la valeur par défaut.
    • user_id dans Template !!! Je l'ai laissé pour info, mais il me semble qu'il ne puisse qu'être générateur de problème dans cette liaison
    • Plus de relation définie dans Template, la déclaration d'une relation ne doit se faire que d'un des deux côté (en général je la déclare du côté 1 de la relation 1-n, mais l'inverse est parfaitement réalisable, question d'habitude.

    Le schéma s'en trouve un peu allégé.

    Pour mettre le nom du user dans tes listes, tu as dans ton modèle un objet dérivé de sfGuardUser, il suffit d'y rajouté le __toSring. Idem pour le nom du template, crée une méthode __toString dans l'objet Template.class.php dans lib/model/doctrine

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

Discussions similaires

  1. [WAMP] Questions liées au réseau
    Par steeve93800 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 08/02/2008, 12h33
  2. [Htaccess] Petites questions liées à la sécurité
    Par jeanphi6 dans le forum Apache
    Réponses: 4
    Dernier message: 21/11/2007, 08h50
  3. Question liée à memset
    Par progfou dans le forum C++
    Réponses: 28
    Dernier message: 21/06/2007, 18h39
  4. Petite question liée aux structures
    Par progfou dans le forum C++
    Réponses: 9
    Dernier message: 24/04/2007, 13h46
  5. Petite question liée au Javascript
    Par systemofaxav dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/03/2006, 14h29

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