Ok, gracias. Lo supuse pero no estaba seguro.
Cita:
Iniciado por maycolalvarez En doctrine2 la lógica de negocios (modelo) recae en los repositorios, mientras la entidad se utiliza para mapear las instancias de los registros, lo que se llama lógica de registro, en pocas palabras en la entidad solo defines métodos que afecten ese registro, como por ejemplo un getNombreCompleto donde en una entidad persona concatenas getNombre y getApellido, mientras que en el repositorio defines métodos que afecten a n registros como getPersonaMayor, donde haces un dql interno para extraer las mayores de 18
Si, gracias por la aclaracion aunque esto mas o menos ya lo sabia. Pero a mi lo que se me ha pasado por la cabeza es, si haces un modelo por tabla mas o menos en un proyecto sencillo, por que no hacer metodos estaticos que no necesites instanciar cada modelo. Un ejemplo:
Código PHP:
class ProductoModelo{
public static function findAll(){
$em = Registry::get('em'); // cogemos el entity manager del registro.
return $em->getRepository('Entidades\producto')->findAll();
}
public static function findBy( $var ){
$em = Registry::get('em'); // cogemos el entity manager del registro.
return $em->getRepository('Entidades\producto')->findby( $var );
}
}
Cogemos el Entity Manager del registro, que ya lo habiamos inicializado y guardado en el bootstrap de nuestra aplicacion, que evidentemente se ejecuta en cada llamada al navegador.
Yo veo factible el hacer esto que estoy preguntando, pero me gustaria saber si alguien mas entendido sabe si es de verdad buena practica o tiene sus contras.
Cita:
Iniciado por maycolalvarez Doctrine2 necesita el EntityManager, de otro modo ¿como mapeara las entidades? es el núcleo (core) de doctrine, sin el no funciona, si usas métodos estáticos en la entidad ¿para que el repositorio? No tiene sentido al igual si una entidad carece de repositorio para poder instanciar registros necesitas llamar al getReference del entityManager y estarías mezclando tu entidad con repositorio, al igual que el queryBuilder que necesita del entityManeger
"¿ instanciar el Entity manager, guardarlo en el registry y que cada vez que en el codigo un modelo necesite hacer uso de ello, coja la instancia y la use o hacer que cada modelo cargue el Entity manager en su constructor por ejemplo ?"
Ya se que necesitas del Entity Manager tanto para hacer uso de las entidades, como de los repository, etc.
Pero lo que yo digo es, si en una unica ejecucion en tu aplicacion web tu haces varias consultas a la base de datos, es decir, varios usos de entidades y repositorios, ¿ que es mejor practica ?
- ¿ En cada uso de entidad o repositorio que necesitas el EM, instancias un nuevo EM con el lanzador de doctrine ?
- ¿ O es mejor instanciar el EM en el bootstrap de tu aplicacion y guardarlo en el registro, y recuperarlo de este cada vez que en una unica ejecucion lo necesitas ?
Espero haberme explicado.
Un saludo.