Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

crodriguesmg

Gerar Tabela HTML Dinamica

Recommended Posts

Boa tarde, estou desenvolvendo um projeto e na área de relatórios estou com um problema...
A Lógica é o seguinte, é um sistema multiempresa desenvolvido em laravel, e no relatório principal eu preciso que o cliente escolha uma empresa ou mais de uma, e depois escolha uma categoria ou mais de uma categoria.
Nesse momento eu preciso que seja gerado o relatorio que estou enviando na imagem, onde as colunas são as empresas e as linha sejam as categorias. O Problema que até ai tudo bem, mas quando eu escolho para uma empresa 2 categorias ai inves de mostrar uma abaixo da outra, ele gera outra coluna com a mesma empresa.
Para ter uma ideia melhor segue imagem.
Pode ser a mesma ação em PHP
Fico no aguardo

Captura.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, Beleza desde já muito obrigado pela resposta..
Estou usando o seguinte codigo para gerar a tabela ..

 

<table class="table table-bordered">
    <thead>
    <th></th>
    @foreach($Lancamentos as $lan)
        <th bgcolor="#ccc">{{$lan->empresas->razaosocial}}</th>
    @endforeach
    </thead>
    <tbody>
    @foreach($Grupos as $grupo)
        <tr>
            <td>{{$grupo->grupos->titulo}}</td>
            @foreach($Lancamentos as $lan3)
                <td class="text-center">
                    @if($grupo->grupos_id == $lan3->grupos_id)
                        R$ {{$lan3->valor}}
                    @else
                        --
                    @endif
                </td>
            @endforeach

        </tr>
    @endforeach
    </tbody>

</table>

 

E Esse é o codigo que estou puxando os dados

 

if(!empty($empresa)){
    $empresa   = implode('',$empresa);

    $dataEmpresa = Lancamentos::whereIn('empresa_id',str_split($empresa));
    foreach($dataEmpresa as $key => $element) {
        if($key == 0) {
            $dataEmpresa->where(DB::raw('empresa_id like %'.$element.'%'));
        }
        $dataEmpresa->orWhere(DB::raw('empresa_id like %'.$element.'%'));
    }
    $lancamentoBusca = $dataEmpresa;
$Lancamentos    = $lancamentoBusca->get();


}//Buscando o Empresa //

if(!empty($variavel)){
    $variavel  = implode('',$variavel);
    $dataVariavel = Lancamentos::whereIn('grupos_id',str_split($variavel));
    foreach($dataVariavel as $key => $element) {
        if($key == 0) {
            $dataVariavel->where(DB::raw('grupos_id like %'.$element.'%'));
        }
        $dataVariavel->orWhere(DB::raw('grupos_id like %'.$element.'%'));
    }
    $lancamentoBusca2 = $dataVariavel;
$Grupos         = $lancamentoBusca2->groupBy('grupos_id')->get();


}//Buscando o Variavel //

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não entendo muito de laravel, então não vou poder te dar um código, mas você precisa usar um 'GROUP BY ' na consulta que busca as empresas por mais de um a categoria, no caso sem o laravel seria o correspondente a isso:

 

Citar

"SELECT empresa FROM empresas WHERE categoria LIKE %'.$categoria.'% GROUP BY empresa"

 

Eu acredito que deva ser condição dessa consulta:

Citar

if($key == 0) {
            $dataVariavel->where(DB::raw('grupos_id like %'.$element.'% GROUP BY empresa_id'));
        }
        $dataVariavel->orWhere(DB::raw('grupos_id like %'.$element.'% GROUP BY empresa_id'));

 

 

Se não for isso, é algo bem próximo disso acredito kkk

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa,
Então eu fiz já de todas as formas e não consigo chegar á um lugar final...
Já agrupei de todas as forma kkkk...
Não estou conseguindo nem uma direção...
Se não for em Laravel, como faria para ficar exatamente dessa forma em PHP..


O que eu quero que que na tabela esteja tido assim...

                              empresa1 | empresa2 | empresa3

Categoria 1             580,00           ---                 600,00

Categoria 2               --                    300,00        800,00  

Categoria 3             100,00           ---                    ---

 

**Lembrado que a empresa e a categoria eu escolho se vai aparecer ou não

Compartilhar este post


Link para o post
Compartilhar em outros sites
13 minutos atrás, crodriguesmg disse:

Opa,
Então eu fiz já de todas as formas e não consigo chegar á um lugar final...
Já agrupei de todas as forma kkkk...
Não estou conseguindo nem uma direção...
Se não for em Laravel, como faria para ficar exatamente dessa forma em PHP..


O que eu quero que que na tabela esteja tido assim...

                              empresa1 | empresa2 | empresa3

Categoria 1             580,00           ---                 600,00

Categoria 2               --                    300,00        800,00  

Categoria 3             100,00           ---                    ---

 

**Lembrado que a empresa e a categoria eu escolho se vai aparecer ou não

 

Cara, vamos tentar kkk

 

Primeiro suponho que você relaciona as tabelas assim:

 

Empresa X -> categoria_1 = 300, categoria_2 = 400

Empresa Y -> categoria_2 = 200, categoria_3 = 100,

 

Você teria uma tabela assim:

<table>
  <thead>
  <tr>
    <th>
      Empresas
    </th>
    <th>
      Categoria 1
    </th>
    <th>
      Categoria 2
    </th>
    <th>
      Categoria 3
    </th>
  </tr>
  </thead>
  <tbody>
    <!-- Aqui vamos listar as empresas e os respectivos valores -->
  </tbody>
</table>

Ai dentro da tag '<tbody>', vamos rodar a consulta, e relacionar.

<?php
$categoria = "Receba a categoria via _POST ou _ GET";
$conecta = "SUA CONEXAO";
$sql = "SELECT * FROM empresas WHERE categoria LIKE %".$categoria."% GROUP BY empresa";
$rs = $conecta->query($sql);
while($row = mysqli_fetch_array($rs){
  $empresa = $row['empresa'];
  $cat_1 = $row['cat_1'];
  $cat_2 = $row['cat_2'];
  $cat_3 = $row['cat_3'];
  
  echo "<tr>";
  //celula da empresa
  echo "<td>$empresa</td>";
  //celula da categoria 1
  echo "<td>$cat_1</td>";
  //celula da categoria 2
  echo "<td>$cat_2</td>";
  //celula da categoria 3
  echo "<td>$cat_3</td>";
  echo "</tr>";
}

Nesse exemplo deve ser printado algo desse formato:

                        Categoria 1     | Categoria  2 | Categoria 3

Empresa 1             580,00           ---                 600,00

Empresa 2               --                    300,00        800,00  

Empresa 3             100,00           ---                    ---

 

E dentro desse loop while você faz as validações e verificações para a exibição da tabela.

Acho que agora da pra ter um base melhor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Há uma grande variação de POGs nesses CODES, que se estudar um pouco mais sobre encapsulamento, deixa o código mais limpo e coeso.


Mas isso não vem ao caso... Para resolver isso mais facilmente, use relacionamentos do Eloquent.


Curso completo

https://laravel.com/docs/5.4/eloquent-relationships#one-to-many-inverse

 



Segue a especifica: boa aula e faça você mesmo.
 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

AnthraxisBR,Gostaria de lhe agradecer desde ja, toda sua disposição em me ajudar, obrigado mesmo..

Williams DuarteFoi no X da questão, vi que o meu problema estava no relacionamento, eu estava puxando duas veses os mesmos dados, isso eh efeito do cansaço kkkkkk....

Muito Obrigado a todos..
Segue meu codigo novamente no final

 

if(!empty($empresa)){
    $empresa   = implode('',$empresa);
    $dataEmpresa = Lancamentos::whereIn('empresa_id',str_split($empresa));

    foreach($dataEmpresa as $key => $element) {
        if($key == 0) {
            $dataEmpresa->where('empresa_id like %'.$element.'%');
        }
        $dataEmpresa->orWhere('empresa_id like %'.$element.'%');
    }
    $lancamentoBusca = $dataEmpresa->groupBy('empresa_id');

}//Buscando o Empresa //

if(!empty($variavel)){
    $variavel  = implode('',$variavel);
    $dataVariavel = Lancamentos::whereIn('grupos_id',str_split($variavel));

    foreach($dataEmpresa as $key => $element) {
        if($key == 0) {
            $dataVariavel->where('grupos_id like %'.$element.'%');
        }
        $dataVariavel->orWhere('grupos_id like %'.$element.'%');
    }
    $grupo = $dataVariavel->groupBy('grupos_id');


}//Buscando o Variavel //


//QUERYS PARA GRAFICOS//
$Lancamentos    = $lancamentoBusca->where('data','>=',$datade)->where('data','<=',$dataate)->get();
$Grupos         = $grupo->where('data','>=',$datade)->where('data','<=',$dataate)->get();

e no blade ficou assim

funcionou direitinho...
 

 <table class="table table-bordered">
                                    <thead>
                                    <th></th>
                                    @foreach($Lancamentos as $empresa)
                                    <th>{{$empresa->empresas->razaosocial}}</th>
                                    @endforeach

                                    </thead>
                                    <tbody>
                                        @foreach($Grupos as $grupo)
                                        <tr>
                                           <td>{{$grupo->grupos->titulo}}</td>
                                            @foreach($grupo->grupos->lancamento as $valor)
                                                <td>{{$valor->valor}}</td>
                                            @endforeach
                                        </tr>
                                        @endforeach
                                    </tbody>
                                </table>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Willian Só mais uma dúvida..
Agora ele está trazendo os resultados como falei a cima..
Mas eu analisei agora com o banco de dados.. ele não está trazendo os resultado abaixo dos campos...
Como poderia resolver isso? Desculpe? rsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

É! Mas tem muita coisa se repetindo ainda!

 

A unica coisa que altera de um escopo para o outro, são os nomes dos campos. 

grupo_ide e empresa_id 

 

$variavel  = implode('',$variavel);
    $dataVariavel = Lancamentos::whereIn('grupos_id',str_split($variavel));

Não entendi! 
Converte um array em string, depois converte a string em array novamente.

 

7 minutos atrás, crodriguesmg disse:

Willian Só mais uma dúvida..
Agora ele está trazendo os resultados como falei a cima..
Mas eu analisei agora com o banco de dados.. ele não está trazendo os resultado abaixo dos campos...
Como poderia resolver isso? Desculpe? rsrs

Acredito que não chegou nem ver as aulas, tudo depende de sua modelagem de dados, por isso enviei o curso completo, se você tiver trabalhando como tabelas que faz o pivot e o video acima, se for relacionamento simples é outra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

**Vi a aula sim**

Vou explicar mais detalhado,
Sobre essa questão do Array ja está resolvido, tirei essa redundância.
Esse codigo é de um relatorio, então o cliente seleciona no relatorio as empresas que ele quer ver e tbm seleciona os grupos que ele quer ver.
então por isso um pesquisa por grupo e outro esta pesquisando por empresa, por que ele pode escolher todas as empresas ou uma empresa só e isso se tbm nos grupos...
 

Compartilhar este post


Link para o post
Compartilhar em outros sites
49 minutos atrás, crodriguesmg disse:

então por isso um pesquisa por grupo e outro esta pesquisando por empresa, por que ele pode escolher todas as empresas ou uma empresa só e isso se tbm nos grupos...
 

 

Continua com o mesmo problema que eu disse antes, falta de coesão e acoplamento que não tinha falado antes.


O grande problema que a galera não entende que orientação a objetos, não é enfiar códigos procedurais dentro de metodos. Ae vem para um FW, sem ao menos estudar padrões de projeto e  a SRP dos princípios SOLID.

Tirando o Eloquent do código abaixo, o restante é tudo codigo procedural.

if(!empty($empresa)){
    $empresa   = implode('',$empresa);
    $dataEmpresa = Lancamentos::whereIn('empresa_id',str_split($empresa));

    foreach($dataEmpresa as $key => $element) {
        if($key == 0) {
            $dataEmpresa->where('empresa_id like %'.$element.'%');
        }
        $dataEmpresa->orWhere('empresa_id like %'.$element.'%');
    }
    $lancamentoBusca = $dataEmpresa->groupBy('empresa_id');

}//Buscando o Empresa //

if(!empty($variavel)){
    $variavel  = implode('',$variavel);
    $dataVariavel = Lancamentos::whereIn('grupos_id',str_split($variavel));

    foreach($dataEmpresa as $key => $element) {
        if($key == 0) {
            $dataVariavel->where('grupos_id like %'.$element.'%');
        }
        $dataVariavel->orWhere('grupos_id like %'.$element.'%');
    }
    $grupo = $dataVariavel->groupBy('grupos_id');


}//Buscando o Variavel //


//QUERYS PARA GRAFICOS//
$Lancamentos    = $lancamentoBusca->where('data','>=',$datade)->where('data','<=',$dataate)->get();
$Grupos         = $grupo->where('data','>=',$datade)->where('data','<=',$dataate)->get();

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, Williams Duarte disse:

 

Continua com o mesmo problema que eu disse antes, falta de coesão e acoplamento que não tinha falado antes.


O grande problema que a galera não entende que orientação a objetos, não é enfiar códigos procedurais dentro de metodos. Ae vem para um FW, sem ao menos estudar padrões de projeto e  a SRP dos princípios SOLID.

Tirando o Eloquent do código abaixo, o restante é tudo codigo procedural.


if(!empty($empresa)){
    $empresa   = implode('',$empresa);
    $dataEmpresa = Lancamentos::whereIn('empresa_id',str_split($empresa));

    foreach($dataEmpresa as $key => $element) {
        if($key == 0) {
            $dataEmpresa->where('empresa_id like %'.$element.'%');
        }
        $dataEmpresa->orWhere('empresa_id like %'.$element.'%');
    }
    $lancamentoBusca = $dataEmpresa->groupBy('empresa_id');

}//Buscando o Empresa //

if(!empty($variavel)){
    $variavel  = implode('',$variavel);
    $dataVariavel = Lancamentos::whereIn('grupos_id',str_split($variavel));

    foreach($dataEmpresa as $key => $element) {
        if($key == 0) {
            $dataVariavel->where('grupos_id like %'.$element.'%');
        }
        $dataVariavel->orWhere('grupos_id like %'.$element.'%');
    }
    $grupo = $dataVariavel->groupBy('grupos_id');


}//Buscando o Variavel //


//QUERYS PARA GRAFICOS//
$Lancamentos    = $lancamentoBusca->where('data','>=',$datade)->where('data','<=',$dataate)->get();
$Grupos         = $grupo->where('data','>=',$datade)->where('data','<=',$dataate)->get();


 

OK, Obrigado
Agradeço de qualquer forma a atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 03/05/2017 at 11:43, Williams Duarte disse:

Continua com o mesmo problema que eu disse antes, falta de coesão e acoplamento que não tinha falado antes.


O grande problema que a galera não entende que orientação a objetos, não é enfiar códigos procedurais dentro de metodos. Ae vem para um FW, sem ao menos estudar padrões de projeto e  a SRP dos princípios SOLID.

Tirando o Eloquent do código abaixo, o restante é tudo codigo procedural.


Agradeço o toque, fui fazer uma analise mais detalhada da minha logica e vi o que você disse..
Agora aquele codigo daquele tamanho se resumiu nesse...

 

  if(!empty($empresa)){
            $Empresa = Empresa::whereIn('id',$empresa)->where('status',1)->get();
        }//Buscando o Empresa //

        if(!empty($variavel)){
            $Grupos = Grupo::whereIn('id',$variavel)->get();

        }//Buscando o Variavel //

E para constar deu certinho minha tabela

Compartilhar este post


Link para o post
Compartilhar em outros sites

Show de Bola!!! Muitos torcem o nariz e nunca mais volta. Parabéns por entender e corrigir.

 

Outro detalhe muito importante, é que seu Controller não deve implementar models, não é responsabilidade do controller. Isso deixa teu código com alto acoplamento, o que é passível de duplicação de códigos.

 

Para melhorar a capacidade de manutenção e a legibilidade do código, tem que separar a lógica de acesso a dados ou serviços do Controller, ou seja abstrair.

Um exemplo para separar a lógica de acesso a dados, é usar repositórios.

 

E1vmyt8.png


No seu caso especifico:

bmOf843.png

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

8 horas atrás, Williams Duarte disse:

Para melhorar a capacidade de manutenção e a legibilidade do código, tem que separar a lógica de acesso a dados ou serviços do Controller, ou seja abstrair.

Sim. eu já implementei o Repository, eu estou trabalhando com ele em todo o meu sistema..
Esse ai foi somente para teste.
Criei um exemplo RepositoryEmpresa e RepositoryEmpresaEloquent, usando interface
Caso eu venha mudar o eloquent só mudo nessa minha Repository.

Obrigado Mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá.
      Estou atualizando meu conhecimento com Front-End e me deparei com o seguinte problema.
      Criei um sistema para fazer o upload de imagens e alguns campos text.
      Algo bem simples para depois começar a estudar javascript para mostrar a miniatura....
      Mas quando saio do navegador Chrome ou da aba por mais de 3 minutos, ao retornar o navegador as vezes atualiza ou nem chega atualizar mas limpa os campos.
      Estou usando um Smart Motorola com Android, mas um amigo testou no iPhone e acontece a mesma coisa.
      Gostaria de saber se há como usar javascript para evitar isso?
      Agradeço desde já.

      <!DOCTYPE html>
      <html>
      <head>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1">
          <title>Uploader</title>
      </head>
      <body>
          <form action="?" method="post" enctype="multipart/form-data">
              <br><br>
              <div>selecione a imagem 1</div>
              <input type="file" name="foto1" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem1">
              
              <br><br>
              <input type="file" name="foto2" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem2">
              
              <br><br>

              <input type="file" name="foto3" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem3">
              
              <br><br>
              <input type="submit" value="Enviar">
              <br><br>
          </form>
      <?php
      if ($_SERVER['REQUEST_METHOD'] == 'POST')
      {
          vardump ($_FILES);
      }
      ?>
      </body>
      </html>
       
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.