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 :

[Doctrine] Valeur par défaut clé étrangère


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 37
    Points : 25
    Points
    25
    Par défaut [Doctrine] Valeur par défaut clé étrangère
    Bonjour.

    Contexte :
    Je développe une API Rest sous symfony2. J'utilise Doctrine, FOSUserBundle et FOSRestBundle.
    Je configure mes entités avec des annotations. J'ai généré mes entités par la console.

    J'ai deux entités : User et Plan.
    User est une extension de FOS\UserBundle\Model\User du FOSUserBundle.
    Ces deux entités sont liées par une relation ManyToOne bidirectionnelle (Plusieurs utilisateurs pour 1 seul plan).
    J'ai donc une clé étrangère plan_id de type int(11) dans la table user en bdd.
    Voici le code de mes 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
     
    class Plan implements PlanInterface
    {
        /* ... */
     
        /**
        * @ORM\OneToMany(targetEntity="...\UserBundle\Entity\User", mappedBy="plan")
        */
        private $users;
     
        public function __construct() 
        {
            $this->users = new \Doctrine\Common\Collections\ArrayCollection();
        }
     
        /* ... */
    }
    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
     
    class User extends BaseUser
    {
        /* ... */
     
        /**
        * @ORM\ManyToOne(targetEntity="...\PlanBundle\Entity\Plan", inversedBy="users")
        * @ORM\JoinColumn(columnDefinition="INT(11) default '1'")
        */
        private $plan;
     
        /**
         * Constructor
         */
        public function __construct()
        {
            parent::__construct();
        }
     
        /* ... */
    }
    Problème :
    Je souhaiterai mettre une valeur par défaut (un int de valeur 1, représentant la première entrée de la table plan) dans la colonne plan_id de la table user à la création d'un utilisateur.

    En espérant avoir été clair,
    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Salut,

    Je ne suis vraiment pas certain qu'il soit possible d'utiliser les annotations pour définir une entité jointe par défaut, et injecter des services à ton entité est possible en utilisant certains bundles mais n'est pas très propre à mon sens.

    J'ai du mal à trouver une solution correcte pour faire ça puisque les entités Doctrine2 ne sont pas supposées avoir accès à l'entityManager ou au repository. Le seul moment ou tu peux y accéder est lors d'un LifecycleCallback, ou tu recevras dans ta méthode le paramètre LifecycleEventArgs.

    L'inconvénient est que ça change ta manière de sauvegarder ton objet et que tu n'as pas l'entité jointe à l'instanciation mais au plus tôt lors du prePersist.

    Une autre solution serait (mais je ne sais pas si ça se fait) de mettre un subscriber sur l'instanciation de l'entité. Un évènement se déclenche dans le __construct() de User et le subscriber se charge de lui affecter l'objet Plan par défaut. Ce subscriber aura lui par contre accès au repository et pourra récupérer l'instance de Plan dont tu as besoin.

    C'est un tir à la mer, je ne suis sûr de rien et il y a probablement mieux à faire : mais c'est ce qui m'est passé par la tête.

    ++

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/07/2004, 17h46
  2. Valeur par défaut dun DBLookupcombobox
    Par lol_adele dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/05/2004, 09h08
  3. Valeur par défaut dans une table objet
    Par Ricky81 dans le forum Oracle
    Réponses: 12
    Dernier message: 18/03/2004, 11h52
  4. Réponses: 2
    Dernier message: 18/10/2003, 14h42
  5. Unique + valeur par défaut
    Par ketalie dans le forum Outils
    Réponses: 4
    Dernier message: 02/07/2003, 15h29

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