entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Una duda con DateTime

Hola a todo el mundo:

Estoy desarrollando una aplicación de aprendizaje para Symfony 2 llamada Cupon y me he encontrado con una problema:

Estoy haciendo una consulta a la base de datos con doctrine 2 para que me traiga las ofertas del día, pero no me funciona correctamente:

 $manager = $this->getDoctrine()->getManager();
 $oferta = $manager->getRepository('OfertaBundle:Oferta')->findOneBy(array(
            'ciudad' => 1,
            'fechaPublicacion' => new \DateTime('today')
            ));

El problema está en esta linea 4, por que me devuelve un array vacío. En cambio cuando a today le añado '23.59.59' (todas las ofertas están publicadas a la misma hora) me devuelve el resultado correcto.

Lo que me dice que el problema está en le formato de la fecha cuando hago la consulta, pero estoy atascado¿Alguien me puede echar un cable?

1 Respuesta

2votos

carlossevi Puntos63580

He trabajado muy poquito con Symfony2 pero voy a darte una pista para que lo descartes porque es un error que yo me he encontrado haciendo consultas a BBDD.

Si el campo de la base de datos es un DateTime significa que lleva información de la fecha y la hora.

Con la siguiente línea construyes una variable DateTime con la información:

new \DateTime('today')
  • Fecha: Hoy (ej. 23/01/2014)
  • Hora: 0:00 (ya que no le informas qué hora, coge el cero)

En la consulta le estás pidiendo que te entregue los registros que encuentra con esa fecha y hora exacta, así que te devuelve un arrray vacío porque no tienes ofertas publicadas a las 0:00.

Tienes que modificar la consulta, se me ocurren dos opciones:

  1. Filtrar por fechas mayores que la marcada, y posiblemente menores que la de mañana (también a las 0:00): Ejemplo: Ofertas poblicadas entre hoy a las 0:00 y mañana a las 0:00.

  2. Modificar la consulta para que sólo compare la parte del día del campo DateTime con la función DATE() de MySQL y no tenga en cuenta la hora.

Ninguna de las dos opciones sé como implementarla en Symfony2 pero ahí te dejo la pista =)

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta