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 violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por ILR master
      Fala pessoal, tudo bem?
       
      Eu tenho o seguinte código:
       
      <script>
         $(function(){
      var jElement = $('.fixar_banner');
      $(window).scroll(function(){
          if ( $(this).scrollTop() > 120 ){
              jElement.css({
                  'position':'fixed',
                  'top':'10px'
              });
          }else{
              jElement.css({
                  'position':'relative',
                  'top':'auto'
              });
          }
      });
      });
      </script>
       
      Porém, eu quero que a div fique fixa até que outro elemento apareça na tela, tipo o rodapé da página por exemplo. É mais ou menos como a página de notícia do uol.
      https://noticias.uol.com.br/internacional/ultimas-noticias/2025/01/19/sonho-americano-brasileiros-moram-em-carro-e-buscam-comida-no-lixo-nos-eua.htm
       
      Espero ter sido claro.
       
      Obrigado :)
       
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
×

Informação importante

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