Ejemplo n.º 1
0
 /**
  * Retorna uma Collection de Empresas ordenadas por numero de seguidores
  * @return Collection
  */
 public static function getMaisSeguidos($entidadeAtiva)
 {
     $maisSeguidosByPerfils = DB::select('
         SELECT empresa_seguido_id, COUNT(empresa_seguido_id) AS quantidade 
         FROM perfil_follow_empresa
         GROUP BY empresa_seguido_id 
         ORDER BY quantidade DESC
         LIMIT 30
         ');
     $maisSeguidosByOngs = DB::select('
         SELECT empresa_seguido_id, COUNT(empresa_seguido_id) AS quantidade 
         FROM ong_follow_empresa
         GROUP BY empresa_seguido_id 
         ORDER BY quantidade DESC
         LIMIT 30
         ');
     $maisSeguidosByEmpresas = DB::select('
         SELECT empresa_seguido_id, COUNT(empresa_seguido_id) AS quantidade 
         FROM empresa_follow_empresa 
         GROUP BY empresa_seguido_id 
         ORDER BY quantidade DESC
         LIMIT 30
         ');
     //Collections contendo objetos com empresa_seguido_id e quantidade
     $colPerfils = Collection::make($maisSeguidosByPerfils);
     $colOngs = Collection::make($maisSeguidosByOngs);
     $colEmpresas = Collection::make($maisSeguidosByEmpresas);
     // arrays contendo os ids das empresas com mais seguidores
     $listaPerfils = $colPerfils->lists('empresa_seguido_id');
     $listaOngs = $colOngs->lists('empresa_seguido_id');
     $listaEmpresas = $colEmpresas->lists('empresa_seguido_id');
     //Juntando os ids em um unico array e eliminando ids duplicados
     $listaTodos = array_merge(array_merge($listaPerfils, $listaOngs), $listaEmpresas);
     $listaIds = array_unique($listaTodos);
     $listaIdSeguidos = Collection::make($entidadeAtiva->following);
     if (count($listaIdSeguidos)) {
         //pegando lista de ids para fazer diff e nao recomendar ids que eu ja sigo
         $listaIdSeguidos = $listaIdSeguidos->lists('id');
         $listaIdSeguidos[] = $entidadeAtiva->id;
         //fazendo diff dos ids que ja sigo
         $listaIds = array_diff($listaIds, $listaIdSeguidos);
     }
     //Pegando collection de Empresas com todos as empresas mais seguidos
     $colSugestoes = Empresa::whereIn('id', $listaIds)->get();
     //Iterando sob o array de ids de empresas mais seguidos
     foreach ($listaIds as $id) {
         $totalSeguidores = 0;
         //Pegando objetos com campo quantidade de seguidores
         $obj1 = $colPerfils->keyBy('empresa_seguido_id')->get($id);
         $obj2 = $colOngs->keyBy('empresa_seguido_id')->get($id);
         $obj3 = $colEmpresas->keyBy('empresa_seguido_id')->get($id);
         //Testando se essas ongs tem seguidores dos tipos Perfil,Ong.Empresa
         if ($obj1) {
             $totalSeguidores += $obj1->quantidade;
         }
         if ($obj2) {
             $totalSeguidores += $obj2->quantidade;
         }
         if ($obj3) {
             $totalSeguidores += $obj3->quantidade;
         }
         //Adicionando numeroTotal de seguidores a empresa com $id
         $empresa = $colSugestoes->find($id);
         if ($empresa) {
             $empresa->quantidadeSeguidores = $totalSeguidores;
         }
     }
     $colSugestoes = $colSugestoes->sortBy(function ($item) {
         return $item->quantidadeSeguidores;
     })->reverse();
     return $colSugestoes;
 }