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 :

sfDoctrineGuardPlugin gestion d'une relation entre un membre(sfGuardUser) et un autre objet


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut sfDoctrineGuardPlugin gestion d'une relation entre un membre(sfGuardUser) et un autre objet
    Tous les développeurs symfony ont eu affaire à ce problème:
    Comment mettre en relation un objet avec un objet sfGuardUser ?
    J'ai besoin d'exemple de fichier schema.yml
    J'ai par exemple un objet EventMember qui définit une relation entre
    un objet Event et un objet Member (qui est en fait un sfGuardUser)
    # config/doctrine/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
     
    Event: 
      actAs: { Timestampable: ~ } 
      columns: 
        id:  { type: integer, primary: true } 
        name: { type: string(255), notnull: true, unique: true } 
    EventMember: 
      columns: 
        event_id:  { type: integer, primary: true } 
        member_id: { type: integer, primary: true } 
        motivation:  { type: string(300) } 
      relations: 
        sfGuardUser:  {  onDelete: CASCADE,local: member_id, foreign: id, 
    foreignAlias: sfGuardUser  } 
        Event:    {  onDelete: CASCADE,local: event_id, foreign: id, 
    foreignAlias: Event  }
    Est-ce que cette configuration est possible?

    Car j'ai cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      SQLSTATE[HY000]: General error: 1005 Can't create table './zulu/ 
    #sql-41ca_1c9.frm' (errno: 121). Failing Query: "ALTER TABLE 
    sf_guard_group_permission ADD CONSTRAINT 
    sf_guard_group_permission_permission_id_sf_guard_permission_id FOREIGN 
    KEY (permission_id) REFERENCES sf_guard_permission(id) ON DELETE 
    CASCADE". Failing Query: ALTER TABLE sf_guard_group_permission ADD 
    CONSTRAINT 
    sf_guard_group_permission_permission_id_sf_guard_permission_id FOREIGN 
    KEY (permission_id) REFERENCES sf_guard_permission(id) ON DELETE 
    CASCADE 
    Merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2009
    Messages : 64
    Par défaut
    J'ai eu a faire la meme config, et effectivement en créeant ceci dans le fichier schema.yml , ca passe pas.

    Ce que j'ai fait, dans mon fichier de l'objet avec lequel je veux etablir une relation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //lib\model\doctrine\Member .class.php
    public function setUp()
      {
          $this->hasOne('sfGuardUser as User', array('local' => 'sf_guard_user_id',
                                                    'foreign' => 'id',
                                                    'onDelete' => 'cascade'));
          parent::setup();
      }
    Tu devra donc coupler ainsi ton objet Member et ton SfGuardUser.

    Et dans mon fichier schema.yml , j'ajoute simplement la ligne correspondante , mais sans relation vers le User sfGuard.

    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
    Member:
      columns:
        #tes champs de Member
        sfGuardUser : {type: integer}
    
    EventMember: 
      columns: 
        event_id:  { type: integer, primary: true } 
        member_id: { type: integer, primary: true } 
        motivation:  { type: string(300) } 
      
      relations: 
        Member : {onDelete etc...}
        Event:    {  onDelete: CASCADE,local: event_id, foreign: id, 
    foreignAlias: Event  }
    En espérant que ca ait pu t'aider.

  3. #3
    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
    sfGuard à la particularité d'utiliser un integer pour sa clef et non pas un big integer, hors, dans symfony, integer donne un big integer, il faut donc, dans la définition de member_id chez toi, préciser integer(4).

    J'ai un peu réarrangé la relation pour la rendre plus lisible.
    Dans un objet $EventMember on va récupérer l'objet sfGuard par $EventMember->getMember()
    Dans un objet $sfGuardUser on va récupérer les EventMember par $sfGuardUser->getEventMembers() qui nous retournera une Doctrine_Collection des objets EventMember en relation.

    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
     
    Event: 
      actAs: { Timestampable: ~ } 
      columns: 
        id:  { type: integer, primary: true } 
        name: { type: string(255), notnull: true, unique: true } 
    EventMember: 
      columns: 
        event_id:  { type: integer, primary: true } 
        member_id: { type: integer (4), primary: true } 
        motivation:  { type: string(300) } 
      relations: 
        Member:  
          class: sfGuardUser
          onDelete: CASCADE
          local: member_id
          foreign: id, 
          foreignAlias: eventMembers
        Event:    {  onDelete: CASCADE,local: event_id, foreign: id, 
    foreignAlias: Event  }

Discussions similaires

  1. Pb avec une relation entre table
    Par stephane77fr dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/08/2007, 16h28
  2. MCD - une relation entre 3 entités
    Par fanette dans le forum Schéma
    Réponses: 6
    Dernier message: 23/11/2006, 20h17
  3. Réponses: 4
    Dernier message: 22/08/2006, 11h20
  4. Réponses: 9
    Dernier message: 24/04/2006, 09h13
  5. Réponses: 5
    Dernier message: 12/12/2005, 18h42

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