Me gustaría incluir algunas funciones adicionales en mis entidades de Doctrine 2 para contener el código que voy a tener que ejecutar con bastante frecuencia. Por ejemplo:¿Puedo incluir una consulta de conveniencia en un Método de Entidad Doctrine 2?
usuario - tiene muchos mensajes
Post - tiene un solo usuario
Ya tengo una función $user->getPosts()
, pero esto se recuperan todos mis mensajes. Estoy buscando para escribir una $user->getActivePosts()
, que sería como:
$user->getPosts()->where('active = true') //if this were possible
o:
$em->getRepository('Posts')->findBy(array('user'=>$user,'active'=>true)) //if this were more convenient
Por lo que yo puedo decir, no hay manera de volver al gestor de la entidad a pesar de la Entidad en sí, así que mi única opción sería
class User {
function getActivePosts() {
$all_posts = $this->getPosts();
$active_posts = new ArrayCollection();
foreach ($all_posts as $post) {
if ($post->getActive()) {
$active_posts->add($post);
}
}
return $active_posts;
}
Sin embargo, esto me obliga a cargar todos los mensajes en mi gestor de la entidad, cuando en realidad sólo quiero un pequeño subconjunto de ellos, y me obliga a hacer el filtrado en PHP, cuando sería m Es más apropiado hacerlo en la capa SQL. ¿Hay alguna forma de lograr lo que estoy buscando hacer dentro de la Entidad, o tengo que crear código fuera de ella?
correcta. Cada vez que esté inclinado a poner un entitymanager dentro de una entidad, sabe que es hora de dar un paso atrás y pensar en hacer lo que esté haciendo en un servicio o repositorio de algún tipo. En el caso de OP, si solo quiere filtrar la colección de Publicaciones, podría hacerlo en la Entidad simplemente haciendo un bucle sobre $ this-> posts y completando una matriz: agradable y limpia, pero no muy eficiente ya que requiere carga/hidratación todas las publicaciones del usuario. – timdev
¿Se considera una mala práctica que Post Entity llame al PostRepository :: findActiveByUser() dentro de su propio método findActivePosts()? –