Para abstraer la lógica de negocio de los controladores podemos crear repositorios de entidades personalizados, esto nos permite llevarnos todo el tema del manejo de la base de datos a una clase aislada del controlador. Esto es lo que yo llamaba en otros frameworks como modelo o modelo de consulta.
Para crear un repositorio en el que añadir nuevos métodos para el modelo tenemos que crear un fichero, por ejemplo, Web/BlogBundle/Entity/PostsRepository.php
<?php namespace Web\BlogBundle\Entity; use Doctrine\ORM\EntityRepository; use Doctrine\ORM\Tools\Pagination\Paginator; //Extendemos al repositorio de entidades y nos creamos un modelo convencional class PostsRepository extends EntityRepository{ //Métodos para la lógica de negocio }
Ahora tendremos que indicarle a la entidad de Doctrine donde está la clase repositorio personalizada. En nuestro caso como tenemos la definición de la entidad y las relaciones en ficheros yaml, vamos al fichero Posts.orm.yml y añadimos la siguiente línea
repositoryClass: Web\BlogBundle\Entity\PostsRepository
Con esto ya podríamos añadir todos los métodos que queramos en el repositorio.
Más información:
Symfony2 Doctrine Custom entity repositories