Yii Framework Forum: Sumar Totales De Relaciones - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Sumar Totales De Relaciones Sumar el total de todas las relaciones de un modelo Rate Topic: ***** 1 Votes

#1 User is offline   rapbore 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 12-April 14

Posted 12 April 2014 - 10:59 AM

Estimados, juntos con saludarlos quería hacer una consulta.

Tengo 2 modelos: Ventas y detalles de venta (venta tiene uno o muchos detalles de venta, y cada detalle de venta le pertenece a una venta (uno a muchos)) y lo que quiero hacer es buscar todos los detalles de venta de una venta y sumar sus totales para luego asignarselo a la venta. Me imagino algo así.


public function actionVerVenta($id) {
$model_venta = $this->loadModel($id, 'Venta');
$model_detalles = DetalleVenta::model()->findAllByAttributes(array('venta_id'=>$id));

/*ACA FALTA UN PASO PARA CARGAR LA VARIABLE $total_detalles CON EL TOTAL DE LOS DETALLES ENCONTRADOS EN LA INSTRUCCION DE ARRIBA.*/

$model_venta->total = $total_detalles;
$model_venta->save();

$this->render('venta/verVenta', array(
'model' => $model_venta,
));
}


El detalle q me falta es como ir sumando los totales, venta por venta. Si bien tengo el $model_detalles cargado con todos los detalles de la venta, no se como recorrerlo para ir sumando los totales. Agradeciendo cualquier ayuda, saludos.
0

#2 User is offline   rapbore 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 12-April 14

Posted 13 April 2014 - 11:20 AM

foreach ($model_detalles as $detalle){
                $total_detalles += $detalle->monto;
            }



Luego continuamos con la asignación del $total_detalles y listo. Auto solucionado xD, Saludos.
0

#3 User is offline   Ramón Menor 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 34
  • Joined: 14-September 11

Posted 14 April 2014 - 03:09 AM

Yo lo hacía así antes pero el problema es que cuando findAll tenga más de 3000 registros ( o un límite relativamente bajo) te fallará ya que la memoria del servidor no será suficiente. Mi solución ante esto fue
        $criteria->select = 'SUM('.$campo.') AS total';        
        $provider = $this->findAll($criteria);

Aquí lo que hago es meterle un criteria donde selecciono el sumatorio del campo que le e he pasado. Así me devuelve el total desde una consulta mysql que es más eficiente y soporta más registro. De momento me suma 160 mil en un instante.
0

#4 User is offline   rapbore 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 12-April 14

Posted 17 April 2014 - 11:47 AM

View PostRamón Menor, on 14 April 2014 - 03:09 AM, said:

Yo lo hacía así antes pero el problema es que cuando findAll tenga más de 3000 registros ( o un límite relativamente bajo) te fallará ya que la memoria del servidor no será suficiente. Mi solución ante esto fue
        $criteria->select = 'SUM('.$campo.') AS total';        
        $provider = $this->findAll($criteria);

Aquí lo que hago es meterle un criteria donde selecciono el sumatorio del campo que le e he pasado. Así me devuelve el total desde una consulta mysql que es más eficiente y soporta más registro. De momento me suma 160 mil en un instante.


Estimado, muchas gracias por su respuesta, muy buena. En mi caso si no habría mayor problema, ya que cada venta tiene a lo sumo unos 10 detalles (con suerte). Pero iwal muy bueno saber su comentario para un futuro. Saludos.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users