Optimizar consulta api res desde el controller

Actualmente estoy trabando esta función para procesar los datos y dar respuesta en formato JSON con un api rest y que este su vez alimente una aplicación mobil necesito mejorar su rendimiento ya optimizado las consultyas a la base de datos pero la respuesta de datos sigue siendo muy lenta si alguien me puede dar un consejo

esta es la función

public function actionGetAllInformacion($usuario, $fechaServicio = NULL){

	if(isset($fechaServicio))


		$fechaServicio = date('Y-m-d H:i:s', $fechaServicio);


    $anio = date("Y");


    $mes = date("m");


    $anioBis = $this->esBiciesto($anio);


    $feb = $anioBis?"29":"28";


    $meses =  array(


        "Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio",


        "Agosto","Septiembre","Octubre","Noviembre","Diciembre"


    );


    $mesesN = array("01","02","03","04","05","06","07","08","09","10","11","12");


    $dLimit = array("31",$feb,"31","30","31","30","31","31","30","31","30","31");





    $mes = intval($mes)-1;


    $fIni = $anio.'-'.$mesesN[$mes].'-01 00:00:00';


    $fFin = $anio.'-'.$mesesN[$mes].'-'.$dLimit[$mes].' 23:59:59';





    $fIniAnte = $anio.'-'.$mesesN[$mes].'-01 00:00:00';


    $fFinAnte = $anio.'-'.$mesesN[$mes].'-'.$dLimit[$mes].' 23:59:59';





    $puntosActual = CalificarEntrenador::model()->getPuntosByEntrenadorXMes($usuario->id, $fIni, $fFin);


    $puntosAnterior = CalificarEntrenador::model()->getPuntosByEntrenadorXMes($usuario->id, $fIniAnte, $fFinAnte);


    


    $arMensajes = array();


    $mensajes = Mensajes::model()->getMensajesServicioxEntrenador($usuario->id, $fechaServicio);


    if($mensajes)


    {   


    	foreach($mensajes as $men)


    	{


    		//$mensaje = Mensajes::model()->getMensajeById($men->id_push);


    		//if($mensaje){


        		$tempM['id'] = $men->id;


        		$tempM['tipoMensaje'] = $men->id_tipos_mensajes;


        		$tempM['mensaje'] = $men->mensaje;


				$tempM['estado'] = $men->estado;


        		$tempM['fechaEnvio'] = $men->fecha_creacion;


        		$arMensajes[] = $tempM;


    		//}


    	}


    }


    $entrenador = array(


        'id'=>$usuario->id,


        'nombre'=>$usuario->nombre,


        'estado'=>$usuario->estado,


        'fechaNacimiento'=>$usuario->fecha_nacimiento,


        'fechaIngreso'=>$usuario->fecha_ingreso,


        'regionalId'=>$usuario->idCiudad->idRegionales->id,


        'regional'=>$usuario->idCiudad->idRegionales->nombre,


        'ciudadId'=>$usuario->idCiudad->id,


        'ciudad'=>$usuario->idCiudad->nombre,


        'telefono'=>$usuario->telefono,


        'celular'=>$usuario->celular,


        'email'=>$usuario->email,


        'idRol'=>$usuario->id_rol,


        'rol'=>$usuario->idRol->rol,


        'puntajeMesActual'=>intval($puntosActual),


        'puntajeMesAnterior'=>intval($puntosAnterior),


        'dispositivo'=>$usuario->dispositivo,


        'totalMensajes'=>count($arMensajes),


        'mensajes'=>$arMensajes,


        'fechaCreacion'=>$usuario->fecha_creacion,


        'fechaEdicion'=>$usuario->fecha_edicion,


        'status'=>$usuario->status,


    );





    $arCapacitaciones = array();


    $capacitaciones = Capacitaciones::model()->getCapacitacionesEntrenadorServicio($usuario->id, $fechaServicio);


    if($capacitaciones)


    {   





        


        foreach($capacitaciones as $capacitacion)


        {


            // $capacitacion = Capacitaciones::model()->findByPk($capa['idCapacitacion']);


            // if($capacitacion)


            // {


            // Capacitacion tipo


            $tempC['tipoCapacitacionId'] = $capacitacion->id_tipo_capacitacion;


            $tempC['tipoCapacitacion'] = $capacitacion->idTipoCapacitacion->nombre;


            $tempC['categoriaId'] = $capacitacion->idTipoCapacitacion->idCategoria->id;


            $tempC['categoria'] = $capacitacion->idTipoCapacitacion->idCategoria->categoria;


            $tempC['fechaCreacion'] = $capacitacion->idTipoCapacitacion->fecha_creacion;


            $tempC['fechaEdicion'] = $capacitacion->idTipoCapacitacion->fecha_edicion;





            // Capacitacion entrenadores


            $entrenadoresCapacitacion = Capacitaciones::model()->getEntrenadoresByCapacitacion($capacitacion->id);


            $arrayEntrenadores = array();


            if($entrenadoresCapacitacion)


            {


                    foreach ($entrenadoresCapacitacion as $ec) {


                        $entre = Usuarios::model()->getEntrenadorByPk($ec['idEntrenador']);


                        if($entre){


                            $tempE['id'] = $entre->id;


                            // $tempE['nombre'] = $entre->nombre;


                            // $tempE['fechaCreacion'] = $entre->fecha_creacion;


                            // $tempE['fechaEdicion'] = $entre->fecha_edicion;





                            $arrayEntrenadores[] = $tempE;


                        }


                        


                    }


                }





            // Capacitacion canales


            $capacitacionCanales = Capacitaciones::model()->getCanalesByCapacitacion($capacitacion->id);


            $arrayCanales = array();


            if($capacitacionCanales)


            {   


                foreach($capacitacionCanales as $cc)


                {


                    $canal = Canales::model()->getCanal($cc['idCanal']);


                    if($canal)


                    {


                        $tempCa['id'] = $canal->id;


                        // $tempCa['nombre'] = $canal->nombre;


                        // $tempCa['fechaCreacion'] = $canal->fecha_creacion;


                        // $tempCa['fechaEdicion'] = $canal->fecha_edicion;





                        $arrayCanales[] = $tempCa;


                    }


      


                }


            }





            // Capacitacion sub-canales


            $capacitacionSubcanales = Capacitaciones::model()->getSubcanalesByCapacitacion($capacitacion->id);


            $arraySubcanales = array();


            if($capacitacionSubcanales)


            {  


                foreach($capacitacionSubcanales as $cs)


                {


                    $subcanal = Subcanales::model()->getSubCanal($cs['idSubcanal']);


                    if($subcanal)


                    {


                        $tempS['id'] = $subcanal->id;


                        // $tempS['nombre'] = $subcanal->nombre;


                        // $tempS['canalId'] = $subcanal->idCanal->id;


                        // $tempS['canal'] = $subcanal->idCanal->nombre;


                        // $tempS['fechaCreacion'] = $subcanal->fecha_creacion;


                        // $tempS['fechaEdicion'] = $subcanal->fecha_edicion;





                        $arraySubcanales[] = $tempS;


                    }


                                  


                }


            }





            // Capacitacion puntos


            $capacitacionPuntos = Capacitaciones::model()->getPuntosByCapacitacion($capacitacion->id);


            $arrayPuntos = array();


            if($capacitacionPuntos)


            {       


                 


                foreach($capacitacionPuntos as $cp)


                {


                    $puntoVenta = PuntosVenta::model()->getPuntoVenta($cp['idPunto']);


                    if($puntoVenta)


                    {


                        $tempV['id'] = $puntoVenta->id;


                        // $tempV['nombre'] = $puntoVenta->nombre;


                        // $tempV['regionalId'] = $puntoVenta->idCiudad->idRegionales->id;


                        // $tempV['regional'] = $puntoVenta->idCiudad->idRegionales->nombre;


                        // $tempV['ciudadId'] = $puntoVenta->id_ciudad;


                        // $tempV['ciudad'] = $puntoVenta->idCiudad->nombre;


                        // $tempV['canalId'] = $puntoVenta->idSubcanal->idCanal->id;


                        // $tempV['canal'] = $puntoVenta->idSubcanal->idCanal->nombre;


                        // $tempV['subCanalId'] = $puntoVenta->id_subcanal;


                        // $tempV['subCanal'] = $puntoVenta->idSubcanal->nombre;


                        // $tempV['dealer'] = $puntoVenta->dealer;


                        // $tempV['direccion'] = $puntoVenta->direccion;


                        // $tempV['fechaCreacion'] = $puntoVenta->fecha_creacion;


                        // $tempV['fechaEdicion'] = $puntoVenta->fecha_edicion;





                        $arrayPuntos[] = $tempV;


                    }


              


                }


            }





            // Capacitacion evaluaciones


            $capacitacionEvaluaciones = Capacitaciones::model()->getEvaluacionesByCapacitacion($capacitacion->id);


            $arrayEvaluaciones = array();


            if($capacitacionEvaluaciones)





            {   


               


                foreach($capacitacionEvaluaciones as $ce)


                {


                    $evaluacion = Evaluaciones::model()->getEvaluacion($ce['idEval']);


                    if($evaluacion)


                    {


                        /*$preguntas = EvaluacionesPreguntas::model()->getPreguntasByEvaluacion($evaluacion->id);


                        $arPres = array();


                        if($preguntas)


                        {


                            foreach($preguntas as $pre)


                            {


                                $tempPre['id'] = $pre->id;


                                // $tempPre['tipoId'] = $pre->idTipo->id;


                                // $tempPre['tipo'] = $pre->idTipo->tipo;


                                // $tempPre['pregunta'] = $pre->pregunta;


                                // $tempPre['fechaCreacion'] = $pre->fecha_creacion;


                                // $tempPre['fechaEdicion'] = $pre->fecha_edicion;





                                $arPres[] = $tempPre;


                            }


                        }*/





                        $tempEv['id'] = $evaluacion->id;


                        // $tempEv['nombre'] = $evaluacion->nombre;


                        // $tempEv['fechaCreacion'] = $evaluacion->fecha_creacion;


                        // $tempEv['fechaEdicion'] = $evaluacion->fecha_edicion;


                        // $tempEv['totalPreguntas'] = count($arPres);


                        // $tempEv['preguntas'] = $arPres;


                        $arrayEvaluaciones[] = $tempEv;








                    }





                    


                         


                }


            }





            // Capacitacion temáticas


            $capacitacionTematicas = Capacitaciones::model()->getTematicasByCapacitacion($capacitacion->id);


            $arrayTematicas = array();


            if($capacitacionTematicas)


            {       


                foreach($capacitacionTematicas as $ct)


                {


                    $tematica = Tematicas::model()->getTematica($ct['idTematica']);


                    if($tematica){


                        $tempT['id'] = $tematica->id;


                        // $tempT['nombre'] = $tematica->nombre;


                        // $tempT['fechaCreacion'] = $tematica->fecha_creacion;


                        // $tempT['fechaEdicion'] = $tematica->fecha_edicion;


                        $arrayTematicas[] = $tempT;


                    }





                    


                }


            }





            // Capacitacion galería


            $capacitacionGaleria = Fotos::model()->getImagenesByCapacitacion($capacitacion->id);


            $arrayImagenes = array();


            if($capacitacionGaleria)


            {    


                foreach($capacitacionGaleria as $imagen)


                {


                    $entre = Usuarios::model()->getEntrenadorByPk($imagen->id_entrenador);


                    if($entre){





                        $tempGuser['id'] = $entre->id;


                        $tempGuser['nombre'] = $entre->nombre;


                        $arGuser[] = $tempGuser;





                        $tempG['id'] = $imagen->id;


                        $tempG['imagen'] = $imagen->imagen;


                        $tempG['fechaCreacion'] = $imagen->fecha_creacion;


                        $tempG['fechaEdicion'] = $imagen->fecha_edicion;


                        $tempG['usuarioCarga'] = $arGuser;


                        $arrayImagenes[] = $tempG;


                    }


                     


                }


            }





            // Capacitacion detalles


            $capacitacionDetalles = Capacitaciones::model()->getDetallesByCapacitacion($capacitacion->id);


            $arrayDetalles = array();


            if($capacitacionDetalles)


            {   


                foreach($capacitacionDetalles as $cd)


                {


                    $detalle = Detalles::model()->getDetalles($cd['idDetalle']);


                    if($detalle)


                    {


                        $tempD['id'] = $detalle->id;


                        //$tempD['nombre'] = $detalle->nombre;


                        $arrayDetalles[] = $tempD;


                    }


                    


                }


            }





            $temp['id'] = $capacitacion->id;


            $temp['nombre'] = $capacitacion->nombre;


            $temp['fechaInicio'] = $capacitacion->fecha_inicio;


            $temp['fechaFin'] = $capacitacion->fecha_fin;


            $temp['diaCompleto']= $capacitacion->dia_completo;


            $temp['regionalId'] = $capacitacion->ciudades->idRegionales->id;


            $temp['regional'] = $capacitacion->ciudades->idRegionales->nombre;


            $temp['ciudadId'] = $capacitacion->id_ciudades;


            $temp['ciudad'] = $capacitacion->ciudades->nombre;


            // $temp['detalleId'] = $capacitacion->id_detalle?$capacitacion->idDetalle->id:NULL;


            // $temp['detalle'] = $capacitacion->id_detalle?$capacitacion->idDetalle->nombre:NULL;


            $temp['lugar'] = $capacitacion->lugar;


            $temp['direccion'] = $capacitacion->direccion;


            $temp['contacto'] = $capacitacion->contacto;


            $temp['estadoId'] = $capacitacion->id_estado;


            $temp['estado'] = $capacitacion->idEstado->estado;


            $temp['fechaCreacion'] = $capacitacion->fecha_creacion;


            $temp['fechaEdicion'] = $capacitacion->fecha_edicion;


            $temp['capacitacionTipo'] = $tempC;


            $temp['totalCapacitacionEntrenadores'] = count($arrayEntrenadores);


            $temp['capacitacionEntrenadores'] = $arrayEntrenadores;


            $temp['totalCapacitacionCanales'] = count($arrayCanales);


            $temp['capacitacionCanales'] = $arrayCanales;


            $temp['totalCapacitacionSubcanales'] = count($arraySubcanales);


            $temp['capacitacionSubcanales'] = $arraySubcanales;


            $temp['totalCapacitacionPuntosVenta'] = count($arrayPuntos);


            $temp['capacitacionPuntosVenta'] = $arrayPuntos;


            $temp['totalCapacitacionEvaluaciones'] = count($arrayEvaluaciones);


            $temp['capacitacionEvaluaciones'] = $arrayEvaluaciones;


            $temp['totalCapacitacionTematicas'] = count($arrayTematicas);


            $temp['capacitacionTematicas'] = $arrayTematicas;


            $temp['totalCapacitacionImagenes'] = count($arrayImagenes);


            $temp['capacitacionImagenes'] = $arrayImagenes;


            $temp['totalCapacitacionDetalles'] = count($arrayDetalles);


            $temp['capacitacionDetalles'] = $arrayDetalles;


            $temp['asistentes'] = $this->actionGetAsitentes($capacitacion);


            $temp['observacion'] = $capacitacion->observacion;





            $arCapacitaciones[] = $temp;


            //}


        }


    }





    // Canales ----------------------------------------------- >>


    $canalesAll = array();


    $canales = Canales::model()->getCanalesServicio($fechaServicio);


    if($canales)


    {  


        foreach($canales as $cn)


        {


            $temp_c['id'] = $cn->id;


            $temp_c['canal'] = $cn->nombre;


            $temp_c['categoriaId'] = $cn->idCategoria->id;


            $temp_c['categoria'] = $cn->idCategoria->categoria;


			$temp_c['estado'] = $cn->status;


            $temp_c['fechaCreacion'] = $cn->fecha_creacion;


            $temp_c['fechaEdicion'] = $cn->fecha_edicion;


            


            $canalesAll[] = $temp_c;


        }


    }





    // Subcanales -------------------------------------------- >>


    $subcanalesAll = array();


    $subcanales = Subcanales::model()->getSubcanalesServicio($fechaServicio);


    if($subcanales)


    {     


        foreach($subcanales as $sb)


        {


            $temp_s['id'] = $sb->id;


            $temp_s['subcanal'] = $sb->nombre;


            $temp_s['canalId'] = $sb->id_canal;


            $temp_s['canal'] = $sb->idCanal->nombre;


            $temp_s['categoriaId'] = $sb->idCanal->idCategoria->id;


            $temp_s['categoria'] = $sb->idCanal->idCategoria->categoria;


			$temp_s['estado'] = $sb->status;


            $temp_s['fechaCreacion'] = $sb->fecha_creacion;


            $temp_s['fechaEdicion'] = $sb->fecha_edicion;





            $subcanalesAll[] = $temp_s;


        }





                


    }





    // Detalles


    $detallesAll = array();


    $detalles = Detalles::model()->getDetallesServicio($fechaServicio);


    if($detalles)


    {


        foreach($detalles as $dt)


        {


            $temp_d['id'] = $dt->id;


            $temp_d['nombre'] = $dt->nombre;


            $temp_d['subcanalId'] = $dt->id_subcanal?$dt->idSubcanal->id:NULL;


            $temp_d['subcanal'] = $dt->id_subcanal?$dt->idSubcanal->nombre:NULL;


            $temp_d['canalId'] = $dt->idCanal->id;


            $temp_d['canal'] = $dt->idCanal->nombre;


            $temp_d['categoriaId'] = $dt->idCanal->idCategoria->id;


            $temp_d['categoria'] = $dt->idCanal->idCategoria->categoria;


			$temp_d['estado'] = $dt->status;


            $temp_d['fechaCreacion'] = $dt->fecha_creacion;


            $temp_d['fechaEdicion'] = $dt->fecha_edicion;





            $detallesAll[] = $temp_d;


        }


    }





    // Temática --------------------------------------------- >>


    $tematicasAll = array();


    $tematicas = Tematicas::model()->getTematicasServicio($fechaServicio);


    if($tematicas)


    {


        foreach($tematicas as $tm)


        {


            $temp_t['id'] = $tm->id;


            $temp_t['tematica'] = $tm->nombre;


			$temp_t['estado'] = $tm->status;


            $temp_t['fechaCreacion'] = $tm->fecha_creacion;


            $temp_t['fechaEdicion'] = $tm->fecha_edicion;





            $tematicasAll[] = $temp_t;


        }


    }





    // Entrenadores ----------------------------------------- >>


    /*$entrenadoresAll = array();


    $entrenadores = Usuarios::model()->getEntrenadoresServicio($fechaServicio);


    if($entrenadores)


    {


        foreach($entrenadores as $entre)


        {


            $fIniE = $anio.'-'.$mesesN[$mes].'-01 00:00:00';


            $fFinE = $anio.'-'.$mesesN[$mes].'-'.$dLimit[$mes].' 23:59:59';





            $fIniAnteE = $anio.'-'.$mesesN[$mes].'-01 00:00:00';


            $fFinAnteE = $anio.'-'.$mesesN[$mes].'-'.$dLimit[$mes].' 23:59:59';





            $puntosActualE = CalificarEntrenador::model()->getPuntosByEntrenadorXMes($entre->id, $fIniE, $fFinE);


            $puntosAnteriorE = CalificarEntrenador::model()->getPuntosByEntrenadorXMes($entre->id, $fIniAnteE, $fFinAnteE);





            $ar_mensajes = array();


	        $mensajes_e = UsuariosPushMensajes::model()->getMensajesXEntrenador($entre->id);


	        if($mensajes_e)


	        {


	        	foreach($mensajes_e as $mens)


	        	{


	        		$mensaje_m = Mensajes::model()->getMensajeById($mens->id_push);


	        		if($mensaje_m){


	        			$temp_me = array();


		        		$temp_me['id'] = $mensaje_m->id;


		        		$temp_me['tipoMensaje'] = $mensaje_m->id_tipos_mensajes;


		        		$temp_me['mensaje'] = $mensaje_m->mensaje;


		        		$temp_me['fechaEnvio'] = $mensaje_m->fecha_creacion;


		        		$ar_mensajes[] = $temp_me;


	        		}


	        	}


	        }


            $temp_e['id'] = $entre->id;


            $temp_e['entrenador'] = $entre->nombre;


            $temp_e['estado'] = $entre->estado;


            $temp_e['fechaNacimiento'] = $entre->fecha_nacimiento;


            $temp_e['fechaIngreso'] = $entre->fecha_ingreso;


            $temp_e['regionalId'] = $entre->idCiudad->idRegionales->id;


            $temp_e['regional'] = $entre->idCiudad->idRegionales->nombre;


            $temp_e['ciudadId'] = $entre->idCiudad->id;


            $temp_e['ciudad'] = $entre->idCiudad->nombre;


            $temp_e['telefono'] = $entre->telefono;


            $temp_e['celular'] = $entre->celular;


            $temp_e['email'] = $entre->email;


            $temp_e['idRol'] = $entre->id_rol;


            $temp_e['rol'] = $entre->idRol->rol;


            $temp_e['puntajeMesActual'] = intval($puntosActualE);


            $temp_e['puntajeMesAnterior'] = intval($puntosAnteriorE);


            $temp_e['dispositivo'] = $entre->dispositivo;


            $temp_e['totalMensajes'] = count($ar_mensajes);


            $temp_e['mensajes'] = $ar_mensajes;


            $temp_e['fechaCreacion'] = $entre->fecha_creacion;


            $temp_e['fechaEdicion'] = $entre->fecha_edicion;


            $temp_e['status'] = $entre->status;





            $entrenadoresAll[] = $temp_e;


            $ar_mensajes = array();





        }


    }*/





    // Evaluaciones ----------------------------------------------- >>


    $evaluacionesAll = array();


    $evaluaciones = Evaluaciones::model()->getEvaluacionesServicios($fechaServicio);


    if($evaluaciones)


    {


        foreach($evaluaciones as $eval)


        {


            /*$arPreguntas = array();


            $preguntas = EvaluacionesPreguntas::model()->getPreguntasByEvaluacion($eval->id);


            if($preguntas)


            {


                foreach($preguntas as $pre)


                {


                    $temp_p['id'] = $pre->id;


                    $temp_p['pregunta'] = $pre->pregunta;


                    $temp_p['fechaCreacion'] = $pre->fecha_creacion;


                    $temp_p['fechaEdicion'] = $pre->fecha_edicion;





                    $arPreguntas[] = $temp_p;


                }


            }*/





            $temp_ev['id'] = $eval->id;


            $temp_ev['evaluacion'] = $eval->nombre;


            //$temp_ev['totalPreguntas'] = count($arPreguntas);


            //$temp_ev['preguntas'] = $arPreguntas;


            $temp_ev['estado'] = $eval->status;


            $temp_ev['fechaCreacion'] = $eval->fecha_creacion;


            $temp_ev['fechaEdicion'] = $eval->fecha_edicion;





            $evaluacionesAll[] = $temp_ev;


        }


    }





    // Preguntas --------------------------------------------------- >>


    $preguntasAll = array();


    $preguntas = EvaluacionesPreguntas::model()->getPreguntasServicios($fechaServicio);


    if($preguntas)


    {


        foreach($preguntas as $pre)


        {


            $temp_p['id'] = $pre->id;


            $temp_p['pregunta'] = $pre->pregunta;


            $temp_p['evaluacionId'] = $pre->idEvaluacion->id;


            $temp_p['evaluacion'] = $pre->idEvaluacion->nombre;


            $temp_p['tipoId'] = $pre->idTipo->id;


            $temp_p['tipo']= $pre->idTipo->tipo;


			$temp_p['estado'] = $pre->status;


            $temp_p['fechaCreacion'] = $pre->fecha_creacion;


            $temp_p['fechaEdicion'] = $pre->fecha_edicion;





            $preguntasAll[] = $temp_p;


        }


    }





    // Tipos de pregunta ------------------------------------------ >>


    $tiposPreguntaAll = array();


    $tipos = TipoPregunta::model()->getListaTipos();


    if($tipos)


    {


        foreach($tipos as $tipo)


        {


            $temp_te['id'] = $tipo->id;


            $temp_te['tipo'] = $tipo->tipo;





            $tiposPreguntaAll[] = $temp_te;


        }


    }





    // Promotores ------------------------------------------------- >>


    $promotoresAll = array();


    $promotores = Usuarios::model()->getPromotoresServicios($fechaServicio);


    if($promotores)


    {


        foreach($promotores as $pro)


        {


            $temp_pr['id'] = $pro->id;


            $temp_pr['documento'] = $pro->documento;


            $temp_pr['promotor'] = $pro->nombre;


            $temp_pr['estado'] = $pro->estado;


            $temp_pr['fechaNacimiento'] = $pro->fecha_nacimiento;


            $temp_pr['fechaIngreso'] = $pro->fecha_ingreso;


            $temp_pr['regionalId'] = ($pro->id_ciudad!='')?$pro->idCiudad->idRegionales->id:null;


            $temp_pr['regional'] = ($pro->id_ciudad!='')?$pro->idCiudad->idRegionales->nombre:null;


            $temp_pr['ciudadId'] = ($pro->id_ciudad!='')?$pro->idCiudad->id:null;


            $temp_pr['ciudad'] = ($pro->id_ciudad!='')?$pro->idCiudad->nombre:null;


            $temp_pr['telefono'] = $pro->telefono;


            $temp_pr['celular'] = $pro->celular;


            $temp_pr['email'] = $pro->email;


            $temp_pr['idRol'] = $pro->id_rol;


            $temp_pr['rol'] = $pro->idRol->rol;


            $temp_pr['canalId'] = ($pro->id_subcanal!='')?$pro->idSubcanal->idCanal->id:null;


            $temp_pr['canal'] = ($pro->id_subcanal!='')?$pro->idSubcanal->idCanal->nombre:null;


            $temp_pr['subCanalId'] = ($pro->id_subcanal!='')?$pro->idSubcanal->id:null;


            $temp_pr['subCanal'] = ($pro->id_subcanal!='')?$pro->idSubcanal->nombre:null;


            $temp_pr['puntoVentaId'] = ($pro->id_punto_venta!='')?$pro->idPuntoVenta->id:null;


            $temp_pr['puntoVenta'] = ($pro->id_punto_venta!='')?$pro->idPuntoVenta->nombre:null;


            $temp_pr['fechaCreacion'] = $pro->fecha_creacion;


            $temp_pr['fechaEdicion'] = $pro->fecha_edicion;





            $promotoresAll[] = $temp_pr;


        }


    }





    // Puntos venta -------------------------------------------- >>


    $puntosVentaAll = array();


    $puntosVenta = PuntosVenta::model()->getPuntosVentaServicios($fechaServicio);


    if($puntosVenta)


    {


        foreach ($puntosVenta as $pv) {


            $temp_pv['id'] = $pv->id;


            $temp_pv['puntoVenta'] = $pv->nombre;


            $temp_pv['regionalId'] = $pv->idCiudad->idRegionales->id;


            $temp_pv['regional'] = $pv->idCiudad->idRegionales->nombre;


            $temp_pv['ciudadId'] = $pv->idCiudad->id;


            $temp_pv['ciudad'] = $pv->idCiudad->nombre;


            $temp_pv['canalId'] = $pv->idSubcanal->idCanal->id;


            $temp_pv['canal'] = $pv->idSubcanal->idCanal->nombre;


            $temp_pv['subCanalId'] = $pv->idSubcanal->id;


            $temp_pv['subCanal'] = $pv->idSubcanal->nombre;


            $temp_pv['dealer'] = $pv->dealer;


            $temp_pv['direccion'] = $pv->direccion;


			$temp_pv['estado'] = $pv->status;


            $temp_pv['fechaCreacion'] = $pv->fecha_creacion;


            $temp_pv['fechaEdicion'] = $pv->fecha_edicion;


            $puntosVentaAll[] = $temp_pv;


        }


    }





    // Regional ------------------------------------------------- >>


    $regionalesAll = array();


    $regionales = Regionales::model()->getRegionalesServicios($fechaServicio);


    if($regionales)


    {


        foreach($regionales as $reg)


        {


            $temp_r['id'] = $reg->id;


            $temp_r['regional'] = $reg->nombre;


			$temp_r['estado'] = $reg->status;


            $temp_r['fechaCreacion'] = $reg->fecha_creacion;


            $temp_r['fechaEdicion'] = $reg->fecha_edicion;





            $regionalesAll[] = $temp_r;


        }


    }





    // Ciudades -------------------------------------------------- >>


    $ciudadesAll = array();


    $ciudades = Ciudades::model()->getCiudadesServicios($fechaServicio);


    if($ciudades)


    {


        foreach($ciudades as $ciu)


        {


            $temp_ci['id'] = $ciu->id;


            $temp_ci['ciudad'] = $ciu->nombre;


            $temp_ci['regionalId'] = $ciu->idRegionales->id;


            $temp_ci['regional'] = $ciu->idRegionales->nombre;


			$temp_ci['estado'] = $ciu->status;


            $temp_ci['fechaCreacion'] = $ciu->fecha_creacion;


            $temp_ci['fechaEdicion'] = $ciu->fecha_edicion;





            $ciudadesAll[] = $temp_ci;


        }


    }





    // Cargos promotor -------------------------------------------- >>


    $cargosPromotorAll = array();


    $cargosPromotor = CargosPromotor::model()->getCargosPromotorServicios($fechaServicio);


    if($cargosPromotor)


    {


        foreach ($cargosPromotor as $cp) {


            $temp_cp['id'] = $cp->id;


            $temp_cp['nombreCargo'] = $cp->nombre_cargo;


            $temp_cp['estado'] = $cp->estado;


            $cargosPromotorAll[] = $temp_cp;


        }


    }











    $result = Array(


        'success'=>true,


        'status'=>'Ok',


        'entrenador' =>$entrenador,


        'totalCapacitaciones'=>count($arCapacitaciones),


        'capacitaciones'=>$arCapacitaciones,


        'totalCanales'=>count($canalesAll),


        'canales'=>$canalesAll,


        'totalSubcanales'=>count($subcanalesAll),


        'subcanales'=>$subcanalesAll,


        'totalDetalles'=>count($detallesAll),


        'detalles'=>$detallesAll,


        'totalTematicas'=>count($tematicasAll),


        'tematicas'=>$tematicasAll,


        // 'totalEntrenadores'=>count($entrenadoresAll),


        // 'entrenadores'=>$entrenadoresAll,


        'totalEvaluaciones'=>count($evaluacionesAll),


        'evaluaciones'=>$evaluacionesAll,


        'totalPreguntas'=>count($preguntasAll),


        'preguntas'=>$preguntasAll,


        'totalTiposPregunta'=>count($tiposPreguntaAll),


        'tiposPregunta'=>$tiposPreguntaAll,


        'totalPromotores'=>count($promotoresAll),


        'promotores'=>$promotoresAll,


        'totalCargosPromotor'=>count($cargosPromotorAll),


        'cargosPromotor'=>$cargosPromotorAll,


        'totalPuntosVenta'=>count($puntosVentaAll),


        'puntosVenta'=>$puntosVentaAll,


        'totalRegiones'=>count($regionalesAll),


        'regiones'=>$regionalesAll,


        'totalCiudades'=>count($ciudadesAll),


        'ciudades'=>$ciudadesAll,


        'fechaServicio' => strtotime('now')


    );





return $result;


}

Buenas.

Es imposible que este código te vaya rápido. Estás recuperando una pasada de información con los correspondientes bucles.

No veo una situación en la que necesites resuperar toda esa info de una vez. Qué es lo que necesitas?

Es q es imposible que necesites toda esa info a la vez!!!

No estoy muy puesto en servicios REST, pero creo q el objetivo es trabajar recuperando datos necesarios para realizar operaciones, no recuperar toda la base de datos. Para eso están las conexiones. No sé, si alguien que sepa más de esto nos pueda arrojar algo de luz…

Un saludo.