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 :
et le repository :
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 les promotions sont récupérées de la façon suivant :
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 ){ //... } }
Est-ce lselon vous la ( ou une ) bonne façon de procéder ou peut-on mieux faire?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $offers = Registry::getEntityManager()->getRepository('ProductRepository')->getSpecialOffers( $idproduct );
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 :
merci pour vos avis
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(); } }![]()
Partager