jueves, 20 de octubre de 2011

Sumar campos en Cakephp y retornar la suma

Lo primero que se me ocurrió para resolver este problema era hacer una consulta find('list), y luego recorrer el arreglo sumando en una variable acumuladora y devolver el resultado.
Esto es sencillo pero resulta poco elegante.

Una mejor solución es incluir en la búsqueda una función de MySQL  y tumar los resultados directamente desde la búsqueda.
Y ya que únicamente necesito un valor, en lugar de find, uso la función field que devuelve un único valor en lugar de un array.

para resumir la cosa quedaría así.


$params = array('equipo_id'=>$equipo_id, 'numero_equipo'=>$numero, 'obra_id'=>$obra_id, 'fecha >'=>$fecha_ini, 'fecha <'=>$fecha_fin);
        $datos = $this->field('SUM(total)', $params  );
return $datos;
Aquí el truco es poner SUM('campo') ya que si la consulta, según las condiciones retorna varios campos, se suman y se devuelve únicamente el resultado.
Si se pone como parámetro de field, simplemente el nombre del campo, retornará la primera coincidencia si alguna.