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

Doctrine2 PHP Discussion :

Jointure entre 3 tables dont une de la récupération de variable de session


Sujet :

Doctrine2 PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 42
    Points : 25
    Points
    25
    Par défaut Jointure entre 3 tables dont une de la récupération de variable de session
    voilà encore!
    Débutant sur Symfony 2, et sur un gros projet, je bloque presqu'à chaque étape.

    En fait j'ai par exemple 3 tables "Ecole" , "Perso", et "user" de FOSUserBundle que j'ai surchargé et nommé "Utilisateurs" .

    A la connexion d'un utilisateur je dois afficher uniquement les données qui concernent sont "Ecole" et toutes les opérations qu'il aurait à réaliser doivent être uniquement liées à celle-ci.

    "Utilisateurs" ManyToOne avec "Ecole"
    "Perso" ManyToOne avec "Ecole"

    ce que j'ai essayé de faire est presque ridicule.
    Si quelqu'un a déjà un truc pareil qui puisse m'inspirer.
    Je plante totalement au niveau de la requête niveau jointure et paramètres.

    je ss Vrmt calé la depuis 3 jrs svp sortez moi de la

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Citation Envoyé par DJYAM'S Voir le message

    A la connexion d'un utilisateur je dois afficher uniquement les données qui concernent sont "Ecole" et toutes les opérations qu'il aurait à réaliser doivent être uniquement liées à celle-ci.
    Là tu peux utiliser les sessions.

    Citation Envoyé par DJYAM'S Voir le message

    Je plante totalement au niveau de la requête niveau jointure et paramètres.
    Il va falloir que tu postes ce que t'as tenté afin qu'on puisse situer le problème et comprendre la structure de tes tables.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Si les session. Mes idées dans le sens je les trouve assez ridicules mais bon je vais les poster tout à l'heure

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 42
    Points : 25
    Points
    25
    Par défaut PersonnelRepository puis PersonnelController en considérant les relations sus-mentionnées
    # <?php

    namespace stage\AutoBundle\Entity;

    /**
    * PersonnelRepository
    *
    * This class was generated by the Doctrine ORM. Add your own custom
    * repository methods below.
    */
    use Doctrine\ORM\EntityRepository;
    class PersonnelRepository extends \Doctrine\ORM\EntityRepository
    {

    Public function AffichePersonnel($id)
    {
    $query = $this->_em->createQuery('SELECT p.nomPersonnel, p.prenomPersonnel, p.fonctionPersonnel FROM stageAutoBundle: Personnel p, stageUtilisateursBundle:Utilisateurs u
    JOIN p.AutoEcole a
    WHERE p.AutoEcole = :id AND u.AutoEcole= :id');

    // Utilisation de getSingleResult car la requête ne doit retourner qu'un seul résultat
    $query->setParameter('stageAutoBundle: Personnel' , array('id'=>$id));
    return $query->getResult();
    }
    }
    #


    et la classe PersonnelController

    #
    <?php
    /**
    * Personnel controller.
    *
    */
    class PersonnelController extends Controller
    {

    /**
    * Lists all Personnel entities.
    *
    */
    public function indexAction()
    {
    $session= $this->getRequest()->getSession();
    $autoecole= $session->get('autoecole');
    $repository = $this
    ->getDoctrine()
    ->getManager()
    ->getRepository('stageAutoBundle: Personnel')
    ;

    $listePersonnel = $repository->AffichePersonnel($autoecole);

    return $this->render('stageAutoBundle: Personnel:index.html.twig', array(
    'Personnel'=>$listePersonnel
    ));
    }
    }
    #

    Désolé pour la qualité du poste, je me sers d'un smartphone dc...

    Merci de consacrer qq minutes à mon souci

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Salut selon ton analyse,est-ce qu'il y a une relation entre la table user et école?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Oui du ManyToOne (unidirectionnelle) du côté user. j'ai surchargé FOSUserBundle donc la table est désormais nommée "Utilisateurs" .

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Je ne connais vraiment pas cette manière de faire.Je me range pour suivre les experts.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Merci d'avoir pris le temps de comprendre le problème. En. outre si vous savez une autre façon de procéder je ss prenant puisqu'à bout d'inspiration

  9. #9
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Ok!dit moi comment tes tables sont liées.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Dans la classe Personnel

    #
    namespace stage\AutoBundle \Entity
    class Personnel
    {
    /**
    * @ORM\ManyToOne(targetEntity="AutoEcole",cascade={"persist"})
    */
    private $AutoEcole;
    #

    Dans la classe Utilisateurs
    #
    namespace stage\UtilisateursBundle\Entity;
    class Utilisateurs extends BaseUser
    {
    /**
    * @ORM\ManyToOne(targetEntity="stage\AutoBundle\Entity\AutoEcole",cascade={"persist"})
    */
    private $AutoEcole;
    #

    et du côté de l'entité "AutoEcole" j'ai rien mis.

  11. #11
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Non je ne parle pas du code mais plutôt l'analyse c'est-à dire les relations qui existent entre ces 3 entités ainsi que les cardinalités.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Mais le code en dit déjà suffisamment à mon avis.

    Plusieurs utilisateurs pour une AutoEcole
    Une AutoEcole pour plusieurs Utilisateurs

    Plusieurs personnel pour une AutoEcole
    Une AutoEcole pour plusieurs Personnel.

    En ce moment j'ai une requêtes qui semble marcher mais j'arrive pas à récupérer l'attribut "AutoEcole" de l'utilisateur connecté pour tester la requete vraiment

  13. #13
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Points : 349
    Points
    349
    Par défaut
    Ok!Faux la poster ça peut nous orienter.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Je pense que j'ai finalement concocté un truc qui marche sauf que plus proche de SQL plutôt que du DQL. Je termine mes tests et je poste la bricole pour rendre plus performant et pour que vous m'indiquez comment rester dans la logique de Symfony

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 42
    Points : 25
    Points
    25
    Par défaut Résultat obtenu
    voici comment je crois avoir dépassé mes limites.

    dans mon Classerepository j'ai la requête suivante
    #
    <?php

    namespace stage\FormationBundle\Entity;

    /**
    * ClasseRepository
    *
    * This class was generated by the Doctrine ORM. Add your own custom
    * repository methods below.
    */
    use Doctrine\ORM\EntityRepository;
    class ClasseRepository extends \Doctrine\ORM\EntityRepository
    {

    Public function AfficheClasse($nom)
    {
    $query = $this->_em->createQuery('SELECT c FROM stageFormationBundle:Classe c, stageAutoBundle:AutoEcole a
    WHERE c.AutoEcole= a.id AND a.nomAutoEcole=:nom
    ');
    $query->setParameter('nom', $nom);

    return $query->getResult();
    }

    }

    #

    Puis dans le ClasseController j'ai ce code

    #
    public function indexAction()
    {
    //Récupération de l'attribut AutoEcole issu de la relation
    //avec la table AutoEcole

    $user = $this->container->get('security.context')->getToken()->getUser();

    $autoecole= $user->getAutoEcole()->getNomAutoEcole();
    //Indique le repository contenant la requête
    $repository = $this
    ->getDoctrine()
    ->getManager()
    ->getRepository('stageFormationBundle:Classe')
    ;
    //Appel de la fonction de ClasseRepository en passant le
    //paramètre indiqué
    $listeClasse = $repository->AfficheClasse($autoecole);

    return $this->render('stageFormationBundle:Classe:index.html.twig', array(
    'Classe' => $listeClasse,
    ));
    }

    #

    De la même façon j'ai fait pour Personnel.

    Je ne suis pas sûre que c soit les bonnes manières mais ça marche. Veuillez apporter vos remarques svp, c du bricolage en tant que débutant sur Symfony et la poo

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Par contre actuellement je voudrais que dans mes formulaire, les menu déroulants issus des relations entre les entités fasse la même chose i.e. affiche la liste déroulante uniquement pour AutoEcole de l'utilisateur connecté.

    Pour ça j'ai écris ma requêtes dans le repository puis je l'appel mais ça ne marche pas à cause du paramètre que je déclare dans la formType

Discussions similaires

  1. [Mapping] Jointure entre 2 tables en une seule classe
    Par caparenlive59 dans le forum Hibernate
    Réponses: 2
    Dernier message: 27/01/2012, 16h02
  2. Réponses: 11
    Dernier message: 30/08/2010, 17h24
  3. [MySQL] Faire une jointure entre deux tables qui ne sont pas dans la même base de données
    Par sandddy dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 03/04/2008, 14h18
  4. Jointure entre deux champs d'une même table
    Par oubli dans le forum Requêtes
    Réponses: 8
    Dernier message: 11/12/2007, 16h20
  5. Optimisation d'une jointure entre 3 tables
    Par gavelin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 14/12/2005, 09h52

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