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 :

ManyToOne vers la même entité


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 62
    Points
    62
    Par défaut ManyToOne vers la même entité
    Bonjour tout le monde,
    J'ai un problème pour créer un type de relation avec Symfony2.

    J'ai une entité User qui peut recevoir des visites sur son profil. Je veux, à chaque fois qu'il y a une visite, que le User l'ayant effectué soit enregistré dans la propriété $viewers de l'User possédant le profil.

    Quelqu'un aurait une idée de comment faire ça ?

    Merci d'avance

  2. #2
    Membre habitué Avatar de anta_res
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 173
    Points
    173
    Par défaut
    Salut,

    Jette un oeil ici cela devrait répondre à te question : http://docs.doctrine-project.org/en/...lf-referencing

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 62
    Points
    62
    Par défaut
    Salut ! Merci de ta réponse.

    J'ai vu cette doc et je me rends bien compte qu'elle pourrait régler mon problème, mais Symfony m'indique que l'annotation @JoinColumn n'existe pas...
    Un use manquant ? Je n'ai pas vu d'infos dans la doc de doctrine à ce niveau-là

  4. #4
    Membre habitué Avatar de anta_res
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 173
    Points
    173
    Par défaut
    Fait voir le code de ton entité.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 62
    Points
    62
    Par défaut
    Re, j'avais oublié le @ORM\ devant JoinColumn. Ça fonctionne mieux maintenant, dans le sens que Doctrine ne me renvoie plus d'erreur. Par contre je n'arrive pas à ajouter des viewers, ou plutôt à les enregistrer en BDD.

    En effet, quand j'arrive sur un profil, j'utilise ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $viewer = $this->getUser();
    $em = $this->getDoctrine()->getManager();
    $user->addViewer($viewer);
    $em->flush();
    où $user représente l'utilisateur dont on visite le profil.
    $viewer est bien ajouté au tableau des viewers, mais il n'y a aucune insertion. Une idée du problème ?

  6. #6
    Membre habitué Avatar de anta_res
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 173
    Points
    173
    Par défaut
    Essai de faire un persist() de ton user avant de faire le flush.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 62
    Points
    62
    Par défaut
    Oui je l'ai fait, sans grande conviction puisque ces entités sont récupérées grâce à Doctrine, donc déjà persistées...

    Cela ne fonctionne pas mieux malheureusement :p

  8. #8
    Membre habitué Avatar de anta_res
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 173
    Points
    173
    Par défaut
    Montre nous le code de ton entité pour voir.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 62
    Points
    62
    Par défaut
    Voilà voilà

    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
    <?php
     
    namespace Mply\UserBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Security\Core\User\UserInterface;
    use Symfony\Component\Validator\Constraints as Assert;
    use Mply\UserBundle\Validator\Constraints as UserAssert;
     
    **
     * User
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Mply\UserBundle\Entity\UserRepository")
     * @ORM\HasLifecycleCallbacks()
     */
    class User implements UserInterface, \Serializable
    {
            /**
    	 *
    	 * @var \Mply\UserBundle\Entity\User
    	 * @ORM\OneToMany(targetEntity="User", mappedBy="viewed")
    	 */
    	protected $viewers;
     
    	/**
    	 *
    	 * @var \Mply\UserBundle\Entity\User
    	 * @ORM\ManyToOne(targetEntity="User", inversedBy="viewers")
    	 * @ORM\JoinColumn(name="viewed_id", referencedColumnName="id")
    	 */
    	protected $viewed;
    }

  10. #10
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    c'est probablement un problème de owning et inverse side:
    http://docs.doctrine-project.org/en/...rtant-concepts
    http://www.developpez.net/forums/d11...y/#post6408197

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $viewer = $this->getUser();
    $em = $this->getDoctrine()->getManager();
    $user->addViewer($viewer);
    $viewer->setViewed($user);//c'est l'attribut viewed qui est utilisé par Doctrine pour déterminer quels requêtes doivent être effectuées
    $em->flush();

  11. #11
    Membre habitué Avatar de anta_res
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 173
    Points
    173
    Par défaut
    Dans ta fonction addViewer() il faut que tu ajoute $this->setViewed($user) comme ça la liaison se fait automatiquement quand tu fait le addViewer()

Discussions similaires

  1. [EJB3.1] Plusieurs relation OneToOne vers la même entité.
    Par piemur2000 dans le forum Java EE
    Réponses: 1
    Dernier message: 11/01/2011, 09h05
  2. une association vers soi-même ?
    Par steve_toulouse dans le forum Hibernate
    Réponses: 1
    Dernier message: 06/10/2006, 12h05
  3. Redirection vers un même formulaire.
    Par lecail65 dans le forum Langage
    Réponses: 28
    Dernier message: 28/07/2006, 10h47
  4. JOIN avec plusieurs Items dirigeant vers le même item ?
    Par Fred_76 dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/07/2006, 12h08
  5. Réponses: 2
    Dernier message: 05/09/2005, 09h45

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