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 :

Association ManyToOne et INSERT INTO problématique entre User et Group


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Transports

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Par défaut Association ManyToOne et INSERT INTO problématique entre User et Group
    Bonjour à tous,

    Je viens à vous aujourd'hui concernant une problématique que je n'arrive pas à résoudre, et plus j'effectue de recherches, plus je nage dans le noir (oui oui c'est une expression^^).

    Je vous expose ma problématique.

    J'ai une table Users ainsi qu'une table Groups.
    Je décide de lier Users à Groups par une association en liant l'id du groupe à l'utilisateur.
    Ce qu'il faut savoir : un utilisateur n'est lié qu'à un seul groupe.

    J'ai donc choisi ManyToOne, mais je pense que c'est faux. Voici les deux entités :

    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
    /**
     * Users
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="DCL\UserBundle\Entity\UsersRepository")
     */
    class Users implements UserInterface
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
    	 /**
         * @ORM\ManyToOne(targetEntity="DCL\UserBundle\Entity\Groups")
         * @ORM\JoinColumn(name="groups_id", referencedColumnName="id", nullable=false)
         */
        protected $groups;
     
    // reste de l'entité
    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
    /**
     * Groups
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="DCL\UserBundle\Entity\GroupsRepository")
     */
    class Groups
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var string
         *
         * @ORM\Column(name="groupname", type="string", length=255, nullable=true)
         */
        private $groupname;
     
        /**
         * @var string
         *
         * @ORM\Column(name="grouplogo", type="string", length=255, nullable=true)
         */
        private $grouplogo;
     
    //reste de l'entité
    Ma première question est donc : Est-ce que ManyToOne est la bonne association ou dois-je me réorienter sur une autre ? Faudrait-il mettre aussi une association dans Groups ?

    ----

    La deuxième problématique fait référence à un INSERT INTO.
    Ce que je veut faire : l'utilisateur peut s'inscrire sur le site. Après avoir rempli le formulaire, on le crée dans la base de données.
    Mais lors de cette création, il faut renseigner l'id du groupe auquel est rattaché l'utilisateur, qui est associé à l'entité Groups. A savoir que l'id du groupe que je veut choisir existe déjà dans l'entité Groups.

    Voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                                    $user = new Users();
    	               // /* SETS */
    				$groups = new Groups();
    				$groups->getId(1);
     
    				$user->setUsername($p['username']);
    				// ........
    				$user->setGroups($groups); // member group
    Mais quand je fait cela, Symfony va me créer un nouvel enregistrement dans Groups, ce que je ne veut pas bien évidemment.
    Comment pourrais-je faire dans ce cas ?


    ---

    Je vous remercie par avance de vos précisions et de vos éclaircissements car je sèche pas mal à ce niveau là.
    Merci à tous,

  2. #2
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    Bonjour.

    Ta relation me semble bonne.
    Un utilisateur a un groupe.
    Un groupe a plusieurs utilisateurs.

    Ensuite, a ta place je changerai quelques formulation.
    Tes classe doivent etre au singulier. on parle d'objet unitaire, qui peuvent être plusieurs, mais la classe ne décrit qu'un seul objet.

    Tu aurais donc User et group.
    Attention, tu devra définir des nom de table différent puisque user et group sont des mots clefs SQL. (my_user par exemple, fos_user si tu utilises FOS User Bundle)

    A coté de cela, tu as 2 cas, soit ton groupe existe, soit non.

    Ton code sera donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $user = new User();
    $group = $em->getRepository('TonBundle:Group')->findBy("groupname"=>$groupname);
    if($group==null){
      $group = new Group();
      $em->persist($group);
    }
    $user->setUsername($p['username']);
    $user->setGroups($group); // member group
    $em->persist($user);
    $em->flush();
    A adapter bien sur selon ton contexte, mais dans l'idée, tu recherche un groupe existant(par id, par nom, ...) et si il n'existe pas, tu le créé.

Discussions similaires

  1. [MySQL] INSERT INTO entre 2 serveurs
    Par Nympheasi dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/08/2009, 16h53
  2. Réponses: 2
    Dernier message: 12/02/2009, 09h59
  3. Jointure entre plusieurs requetes INSERT INTO
    Par Bernard67 dans le forum Requêtes et SQL.
    Réponses: 18
    Dernier message: 11/01/2009, 18h42
  4. Virgule refusée entre les séries dans INSERT INTO
    Par patic dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/01/2009, 12h29
  5. [SQL Server] Insert into entre BDD identiques
    Par emilie1t dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/11/2006, 09h04

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