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 :

jointures & shema ? [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Par défaut jointures & shema ?
    Bonjour,

    Je suis en train de corriger une application de gestion de commande créée par un autre développeur.

    J'ai donc un module command avec des filtres. J'ai modifié la gestion des utilisateurs (sfGuargUser), il faut donc maintenant filtrer les commandes par groupe d'utilisateur.
    J'ai bien ajouté mon filtre. Là où je sèche c'est sur la requête de récupération des commandes du groupe.

    En SQL ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Command c LEFT JOIN sf_guard_user_group ug USING (user_id) WHERE ug.group_id=35
    Dans mon code synfony, ceci me semblait correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query
          ->leftJoin('sfGuardUserGroup sfGuardUserGroup')
          ->andWhere('sfGuardUserGroup.group_id', $values)
        ;
    Or j'ai une erreur :
    Column not found: 1054 Unknown column 'sfGuardUserGroup.group_id' in 'where clause'
    La requête SQL fonctionne parfaitement dans phpmyadmin, le champ existe donc bien dans la table.

    Voici une partie de mon schema.yml qui correspond aux besoins de la requête. :
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    Command:
      actAs: [Timestampable]
      columns:
        reference:
          type: string(30)
        ...
        payment_id:
          type: bigint
      indexes:
        step_idx:
          fields: [step]
        shipping_method_idx:
          fields: [shipping_method]
        payment_method_idx:
          fields: [payment_method]
        payment_id_idx:
          fields: [payment_id]
      relations:
        Products:
          class: Product
          refClass: CommandProducts
          local: command_id
          foreign: product_id
          foreignAlias: Commands
        User:
          class: sfGuardUser
          local: user_id
          onDelete: NO ACTION # en cas de suppression de l'utilisateur, afficher "utilisateur supprimé"
     
    sfGuardUser:
      actAs: [Timestampable]
      columns:
        first_name: string(255)
        ...
        ville:
          type: string(128)
        phone:
          type: string(12)
      indexes:
        is_active_idx:
          fields: [is_active]
        # index personnalisés
        phone_idx:
          fields: [phone]
        is_optin_mail_idx:
          fields: [is_optin_mail]
        is_optin_sms_idx:
          fields: [is_optin_sms]
        # fin index personnalisés
      relations:
        Groups:
          class: sfGuardGroup
          local: user_id
          foreign: group_id
          refClass: sfGuardUserGroup
          foreignAlias: Users
        Permissions:
          class: sfGuardPermission
          local: user_id
          foreign: permission_id
          refClass: sfGuardUserPermission
          foreignAlias: Users
     
    sfGuardUserGroup:
      options:
        symfony:
          form:   false
          filter: false
      actAs: [Timestampable]
      columns:
        user_id:
          type: integer
          primary: true
        group_id:
          type: integer
          primary: true
      relations:
        User:
          class: sfGuardUser
          local: user_id
          onDelete: CASCADE
        Group:
          class: sfGuardGroup
          local: group_id
          onDelete: CASCADE
    Est-ce que cela vient des relations ? avez vous besoin d'autres bouts de code pour savoir ce qui cloche ?

    Merci d'avance.

  2. #2
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    Dans ton schéma tu as définit les relation donc tu dois les utiliser. Une fois définit tu ne peux plus en redéfinir d'autre comme tu fais.

    Si tu définis le "foreignAlias" alors c'est lui que tu dois utiliser sinon c'est la première déclaration.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $q = $this->createQuery('c')->leftJoin('User u')->leftJoin('u.Groups g')->where('...');
    Et vu que tu es en relation "many-to-many" alors tu n'as pas à gérer la table intermédiaire c'est doctrine qui le fait.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Par défaut
    Merci pour cette réponse très claire, je n'avais pas bien pigé cette notion de relation (premier site sous symfony repris d'un ancien développeur... pas des plus simple comme première prise en main ).

    Par contre il ne trouve pas mon group_id. Est-ce qu'il faut que j'ajoute un
    join avec la relation "Group" ? Cela me semblerait superflue puisque je n'ai pas besoin d'utiliser les infos de cette table.

  4. #4
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    La normalement tu as ce qu'il faut si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->where('g.id = ?', $group);
    "Groups g" te situe si je ne me trompe pas directement sur la sfGroupUser. et non la table de jointure.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Par défaut
    super merci, je pensais qu'il allait tout de même dans la table des relations.


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

Discussions similaires

  1. Jointure qui ne renvoie pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2024, 09h33
  2. Jointures en SQL
    Par Guizz dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/06/2003, 12h21
  3. Réponses: 14
    Dernier message: 17/03/2003, 18h31
  4. Jointures INNER et jointures classiques ???
    Par UbiK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2002, 10h29

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