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 :

best practices - Repository et EntityManager


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Par défaut best practices - Repository et EntityManager
    salut,

    j'ai cru comprendre qu'il était fortement déconseillé d'accéder à l'EntityManager au sein d'une entité et qu'il était préférable de dériver la classe EntityRepository pour y placer les méthodes qui ne concernent pas directement le modèle.

    Cela donnerait par exemple, pour récupérer toutes les déclinaisons d'un produit qui sont en promotion, le code suivant :

    entité pour le produit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /**
     * @Entity(repositoryClass="Repositories\ProductRepository")
     * @Table(name="product")
     */
    class Product{
        //...
        //la méthode pour récupérer les promos ne se trouve pas ici car elle ne concerne pas le modèle
    }
    et le repository :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    namespace Repositories;
    use Doctrine\ORM\EntityRepository;
     
    class ProductRepository extends EntityRepository{
     
        //méthode pour récupérer les promotions des déclinaisons d'un produit
        public function getSpecialOffers( $idproduct ){
            //...
        }
     
     
    }
    et les promotions sont récupérées de la façon suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $offers = Registry::getEntityManager()->getRepository('ProductRepository')->getSpecialOffers( $idproduct );
    Est-ce lselon vous la ( ou une ) bonne façon de procéder ou peut-on mieux faire?

    Par ailleurs, serait-il vraiment maladroit d'accéder à l'EntityManager à l'intérieur de la l'entité afin de garantir la persistence de celle-ci de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Product{
     
        public function save(){
     
            Registry::getEntityManager()->persist( $this );
            Registry::getEntityManager()->flush();
     
        }
     
    }
    merci pour vos avis

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Par défaut
    C'est en effet comme cela qu'il faudrait faire, a part peut-être la maniére dont tu appel le Repository, regarde les docs sur les méthodes du controller, ou si tu es dans un service, envoie toi le service de l'EntityManager

    Et en effet, il est vraiment déconseillé de laisser accès a l'entityManager dans une entité. Pour ta méthode save ou d'autre méthodes, créer toi un service propre à ton entité

    J'espère que j'ai pu répondre à ta question

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Par défaut
    Merci pour ta réponse Teudjy, ça me permet d'y voir déjà beaucoup plus clair .

    Note : pour ce qui est de la façon dont j'appelle l'EntityManager, c'est en fait parce que je n'utilise pas Symfony mais Doctrine seul(e?).
    J'utilise juste le pattern Registry de façon à ne pas avoir à me trimballer des variables globales un peu partout.

    merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Par défaut
    Autant pour moi

    Ravis d'avoir pu t'aider

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 16/06/2006, 13h46
  2. swing best practices.
    Par bbclone dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 07/06/2006, 10h14
  3. Réponses: 4
    Dernier message: 23/05/2006, 14h22

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