Sumar Totales De Relaciones

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.


foreach ($model_detalles as $detalle){

                $total_detalles += $detalle->monto;

            }

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

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.