Doctrine (Where MAX)

122 views
Skip to first unread message

TerOZ

unread,
Jul 20, 2013, 4:52:14 PM7/20/13
to symfo...@googlegroups.com
Primero que todo saludos , mi problema es el siguiente. 

Tengo este Action, que me devuelve la producción de ayer. 

public function indexAction()
    {
        $produccionayer=$this->getProduccionAyer();
        $productos=  $this->getProductos();
        $em = $this->getDoctrine()->getManager();
        $qb = $em->createQueryBuilder();
        $yesterday = new \DateTime('yesterday');
        $entities = $qb->select('r.id','r.centro','SUM(r.kg) AS suma')->from('PSCCL\ReportesBundle\Entity\Produccion', 'r')
        ->where($qb->expr()->in('r.fecha',':yesterday'))
        ->groupBy('r.centro')
        ->setMaxResults('30')
        ->setParameter('yesterday', $yesterday)
        ->getQuery()
        ->getResult();
        return $this->render('PSCCLReportesBundle:Produccion:index.html.twig', array(
            'entities' => $entities,
            'productos' => $productos,
            'produccionayer'=>$produccionayer
        ));
  }

Pero necesito que me devuelva la ultima producción por lo tanto en el Where tengo que añadir un select MAX fecha, lo cual no he podido lograr. 

Alguien me da una mano? 

Saludos 

aprendizenlared

unread,
Jul 22, 2013, 3:33:52 AM7/22/13
to symfo...@googlegroups.com
Así ha simple vista... creo que el parámetro de setMaxResults debe ser un entero y tu le estas pasando un string (que no se si funcionará)

Saul Hormazabal

unread,
Jul 23, 2013, 10:28:24 AM7/23/13
to symfo...@googlegroups.com
Si solo quieres el ultimo debes ordenar primero, y luego limitar el total de respuestas 1

TerOZ

unread,
Jul 23, 2013, 3:42:04 PM7/23/13
to symfo...@googlegroups.com
Tu respuesta me dio la idea de crear una función que me devuelva la ultima fecha , para luego usar esa fecha ara obtener la ultima producción. 
Para obtener la ultima fecha escribí la siguiente función: 

  public function getMaxFecha(){
        
        $em = $this->getDoctrine()->getEntityManager();
        $qb = $em->createQueryBuilder();
        $resultado = $qb->select('f.fecha')->from('PSCCL\ReportesBundle\Entity\Produccion', 'f')
            ->orderBy('f.fecha','desc')
            ->setMaxResults('1')
            ->getQuery()
            ->getSingleResult();
      return $resultado;
       
    }
   
}

Pero devuelve un Datetime Object

Array ( [fecha] => DateTime Object ( [date] => 2013-07-22 00:00:00 [timezone_type] => 3 [timezone] => UTC ) ) 

Trato de formatearlo para pasarlo a String para poder usarlo en la otra función  de la siguiente manera. 

if($dateObj instanceof \DateTime){
$dateObj->format('Y-m-d H:i:s');
}

pero creo que como no es un objeto datetime, no entra y no realiza el formato correo, 
alguien sabe como pasar este objeto a String para poder usarlo en la otra funcion? 


Saludos

Saul Hormazabal

unread,
Jul 23, 2013, 3:49:45 PM7/23/13
to symfo...@googlegroups.com
Creo estas accediendo mal al arreglo, si quieres obtener la fecha del resultado debería ser de la siguiente forma:

$fecha = $resultado['fecha'];

juan vexenat

unread,
Jul 23, 2013, 3:52:35 PM7/23/13
to symfo...@googlegroups.com
fijate si funciona
return date('Y-m-d H:i:s', $dateObj->getTimestamp());


--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es
 
---
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

TerOZ

unread,
Jul 23, 2013, 4:34:33 PM7/23/13
to symfo...@googlegroups.com
Muchisimas Gracias Saul

Efectivamente lo que ocurría era que no estaba tratando de formatear un Datetime Object, si no que un Array de Datetime Objects. 

Muchas gracias de nuevo. 

:)  

Saul Hormazabal

unread,
Jul 23, 2013, 4:36:21 PM7/23/13
to symfo...@googlegroups.com
De nada :D


--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es
 
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/symfony-es/DRgp_WjciPQ/unsubscribe. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a symfony-es+...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages