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:
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:
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:
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:
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 :)