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