ayuda con consultaa la base de datos (find)

164 views
Skip to first unread message

Dionny Fernandez

unread,
Nov 5, 2013, 2:16:21 PM11/5/13
to cakep...@googlegroups.com
Buenas tardes señores de grupo, nuevamente recurro a ustedes para solicitar su ayuda con el siguiente inconveniente
tengo una tabla prestamos y una clientes con sus respectivos models y controller, deseo realizar una consulta en ellas la cual usando sql tengo resuelta pero cuando intento realizarla en cake no se como hacerlo. La consulta que ya tengo es la siguiente:

Select  count(id), sum(monto) from prestamos where cliente_id='1';
y esto me trae como resultado lo que espero que es la sumatoria de los montos de los prestamos asociados al cliente 1 y un contador que me dice cuantos prestamos asociados tiene este cliente.

asi es como tengo mi controller actualmente:
public function principio($id = null)
{
$this->Cliente->recursive = 0;       
        $totales = $this->Cliente->find('all', array(
                        'fields' => array('COUNT(Prestamo.monto) AS Prestamos', 'SUM(Prestamo.monto) AS Prestamos'),
                        'conditions' => array( 'Prestamo.id' => '$id ')
                        ));
                        $this->set('clientes', 'totales', $this->Paginator->paginate());
}

le he hago un debug a la variable totales pero me retorna null.
por favor si alguien pudiera ayudarme le estaria agradecido...
Saludos

Aland Laines

unread,
Nov 5, 2013, 2:59:41 PM11/5/13
to cakep...@googlegroups.com
Una primera acotacion a ambos campos le estas colocando: AS Prestamos

Aland Laines Calonge
Twitter: @lainessolutions


--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP en Español" 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 cakephp-esp...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a cakep...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/cakephp-esp.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

Aland Laines

unread,
Nov 5, 2013, 3:16:06 PM11/5/13
to cakep...@googlegroups.com
segundo, te has fijado que te devuelve: echo $this->element('sql_dump');
Alli puedes ver si la sentencia que genera es la que deseas.

Saludos,

Aland Laines Calonge
Twitter: @lainessolutions


Dionny Fernandez

unread,
Nov 18, 2013, 9:35:11 AM11/18/13
to cakep...@googlegroups.com
partiendo de la respuesta del amigo aland me di cuenta que el sql de salida no era ni la mitad de lo que realmente quierpo que haga cambie la consulta en el controller  pero ahora me suma todo el contenido de la columna monto, es decir no me toma la condicion.
La consulta que quiero hacer es la siguiente: select count(monto), sum(monto) from prestamos where cliente_id = $id; el $id es el identificador del cliente, esta consulta la estoy haciendo desde el  ClientesController y la tengo de la siguiente manera:
    $suma = array( 'fields' => array('SUM(monto)'),  array('conditions' => array('cliente_id.' => $id)));
        $this->set('totales', $this->Cliente->Prestamo->find('all', $suma));
       
y este es el resultado que me trae el   echo $this->element('sql_dump');
SELECT SUM("monto") FROM "public"."prestamos" AS "Prestamo" LEFT JOIN "public"."clientes" AS "Cliente" ON ("Prestamo"."cliente_id" = "Cliente"."id") LEFT JOIN "public"."tasas" AS "Tasa" ON ("Prestamo"."tasa_id" = "Tasa"."id") LEFT JOIN "public"."modalidades" AS "Modalidade" ON ("Prestamo"."modalidade_id" = "Modalidade"."id") WHERE 1 = 1

el debug me muestra esto:
array(
	(int) 0 => array(
		(int) 0 => array(
			'sum' => '80066.0'
		)
	)
)

no se que estoy haciendo mal para que no me tome la condición, cualquier ayuda estare agradecido...

       


Aland Laines

unread,
Nov 18, 2013, 10:23:07 AM11/18/13
to cakep...@googlegroups.com
Esto debería funcionar:

$this->Prestamo->find('all',array('fields'=>array('COUNT(Prestamo.id)','SUM(Prestamo.monto)'),'conditions'=>array('Prestamo.cliente_id'=>$id)));

Recuerda que el el campo a sumart debe estar declarado como numerico.

Saludos!

Aland Laines Calonge
Twitter: @lainessolutions


Dionny Fernandez

unread,
Nov 19, 2013, 10:04:23 AM11/19/13
to cakep...@googlegroups.com
TEMA SOLUCIONADO..!

A continuacion  explico como se pudo resolver, gracias  a  la ayuda del amigo Aland Laines.
el controller se coloco de la siguiente manera:

$this->Cliente->Prestamo->recursive= -1;   //aqui le decimos al controller que omita las relaciones que existen, si esto no se coloca pedira que se coloque el GROUP BY, lo cual dara un resultado diferente al buscado, buscara tambien las otras consultas.
        $suma =array('fields'=>array('COUNT(Prestamo.id)','SUM(Prestamo.monto)'),'conditions'=>array('Prestamo.cliente_id'=>$id));     /// sentencia con las opciones y columnas a consultar y sumar, en mi caso los montos.
        $this->set('totales', $this->Cliente->Prestamo->find('all', $suma));
   /// envio de variable tipo array a la vista y la ejecucion del metodo find.
esto trae el SQL resultante esperado, en mi caso:

SELECT COUNT("Prestamo"."id"), SUM("Prestamo"."monto") FROM "public"."prestamos" AS "Prestamo" WHERE "Prestamo"."cliente_id" = 3

De esta manera quedo solucionado este hilo. Saludos y Gracias Nuevamente....
Reply all
Reply to author
Forward
0 new messages