Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Filtragem de dados

Boa tarde, estou fazendo uma tabela onde lista apenas os 5 primeiros usuários e queria que ele pudesse listar na próxima lista os outros 5 como se fosse uma buscar com limit e offset.

Eu dei uma pesquisada sobre como utilizar isso no eloquent eu achei mais sobre isso

$users = DB::table('users')->skip(10)->take(5)->get();

Skip e o Take, porém existe uma grande dúvida como vou fazer isso dentro do table?

@extends('layout.principal')

@section('conteudo')

<div>
<h1>Lista de pessoas cadastradas <span class="glyphicon glyphicon-user"> </span></div></h1>
</div>
<br/>
<h2 style="text-align:center;">Busca</h3>

<form class='col-md-12' method='post' action="/administrador/listarpessoas">
  <input type="hidden" name="_token" value="{{ csrf_token() }}" />

  <div class='input-group' style='width:340px;text-align:center;margin:0 auto;'>
    <input type='text' class='form-control' name="nome" placeholder='Digite o nome da pessoa' required=""><br><br>
    <div class="form-group">
      <label for="opcao">Opção</label>
      <div>
        <select id="opcao" name="opcao" class="form-control" required="">
          <option selected disabled value="">Selecione</option>
          <option value="nome">Nome</option>
          <option value="cpf">CPF</option>
          <option value="email">Email</option>
        </select>
      </div>
    </div><br/><br/>
    <button type="submit" class="btn btn-primary">Buscar</button><br><br>
    <a href="/administrador/pessoa" class="btn btn-default">Listar todas as pessoas</a><br><br>
  </div>
</form><br/><br/>
@if(old('nome'))
  <div class="alert alert-success">
    <strong>Sucesso!</strong> 
      A pessoa {{ old('nome') }} foi cadastrado.
  </div>
@endif
<div>
  <a href="/administrador/formpessoa" class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> Cadastrar</a><br><br>
</div>
<div style="text-align:center;">
  <button type="button" class="btn btn-primary btn-sm">
          <span class="glyphicon glyphicon-arrow-left"></span> Anterior
        </button>
    <b>AQUI QUERIA QUE MOSTRA O PRIMEIRO ITEM.</b>
  <button type="button" class="btn btn-primary btn-sm">
          <span class="glyphicon glyphicon-arrow-right"></span> Próximo
        </button>
</div>
<br/>
<table class="table table-striped table-bordered table-hover">
  <tr>
    <th>ID</th>
    <th>Nome</th>
    <th>Sexo</th>
    <th>CPF</th>
    <th>Data de Nascimento</th>
    <th>Email</th>
    <th>Telefone 1</th>
    <th>Telefone 2</th>
    <th>Editar</th>
    <th>Excluir</th>
  </tr>
@forelse($pessoas as $p)
        <td>{{ $p->id }}</td>
        <td>{{ $p->nome }}</td>
        <td>{{ $p->sexo }}</td>
        <td>{{ $p->cpf }}</td>
        <td>{{ date('d/m/Y', strtotime($p->data_nascimento)) }}</td>
        <td>{{ $p->email }}</td>
        <td>{{ $p->telefone_1 }}</td>
        <td>{{ $p->telefone_2 }}</td>
        <td> 
          <a href="/administrador/formeditarpessoa/{{$p->id}}"> 
            <span class="glyphicon glyphicon-pencil"></span>
          </a>
        </td>
        <td> 
          <a href="#" class="glyphicon glyphicon-trash" data-toggle="modal" data-target="#{{$p->id}}"></a>
                <div id="{{$p->id}}" class="modal fade" role="dialog">
                  <div class="site-wrapper">
                    <div class="modal-dialog">                
                      <div class="modal-content">
                          <div class="modal-header">
                            <button type="button" class="close" data-dismiss="modal">&times;</button>
                            <h4 class="modal-title">Pessoa</h4>
                          </div>

                          <div class="modal-body">
                            <p>Deseja excluir a pessoa? <br> <h3><b>{{$p->nome}}</b></h3></p>
                          </div>

                          <div class="modal-footer">
                            <a href="/administrador/deletarpessoa/{{$p->id}}" class="btn btn-primary">Sim</a>
                            <a href="/administrador/pessoa" class="btn btn-default" data-dismiss="modal">Não</a>
                        </div>
                      </div>
            </div>
                  </div>
              </div>
          </td>
        </td>
      </tr>
  @empty
    <div class="alert alert-danger">
    Você não tem nenhuma pessoa cadastrada!.
  </div> 
  @endforelse
</table>
@stop

Código acima mostra meus resultados e o código abaixo é o controller que gera essa view

    public function pessoa(){
        $pessoas = Pessoa::orderBy('id')->get();
        return view('administrador.pessoa')->with('pessoas', $pessoas);
    }
5 respostas

Yuri, tudo bem? Bem, basicamente a lógica seria...

Seu método receber um parametro indicando a página atual. Tipo, caso nada seja passado, ele carrega os 5 primeiros. Caso seja passado o valor 1, então o skip passa a multiplicar (1 * 5) e o take continua pegando os 5.

Em algum lugar, você precisa capturar o total de usuários no banco, dividir esse valor por 5 e assim você terá o número de páginas possiveis.

Na tabela propriamente dita, você não tera nada relacionado a isso. Você precisara de uma lista com os links para as páginas. Digo página, por que isso que quer fazer, me parece o recurso de paginação de resultados.

Será então, a mesma página que você tem em maos, com alguns links que adicionam somente um parametro na página ( algo como ?page=5) e o método do controller verificara o resultado, alterando a query.

Entendeu? Espero que sim, parece meio confusa minha explicação. Bons estudos, abraço.

Olhando sua lógica consegui fazer mais ou menos assim.

public function pessoa($pagina){
        $offset = 10 *($pagina - 1);
        $p_ant = $pagina - 1;
        $p_prox = $pagina + 1;
        return view ('administrador.pessoa')->with('pessoas', $pessoas = Pessoa::orderBy('id')->take(10)->skip($offset)->get())->with('pagina',$pagina)->with('p_prox',$p_prox)->with('p_ant',$p_ant);
    }

Na view ficou assim

@extends('layout.principal')

@section('conteudo')

<div>
<h1>Lista de pessoas cadastradas <span class="glyphicon glyphicon-user"> </span></div></h1>
</div>
<br/>
<h2 style="text-align:center;">Busca</h3>

<form class='col-md-12' method='post' action="/administrador/listarpessoas">
  <input type="hidden" name="_token" value="{{ csrf_token() }}" />

  <div class='input-group' style='width:340px;text-align:center;margin:0 auto;'>
    <input type='text' class='form-control' name="nome" placeholder='Digite o nome da pessoa' required=""><br><br>
    <div class="form-group">
      <label for="opcao">Opção</label>
      <div>
        <select id="opcao" name="opcao" class="form-control" required="">
          <option selected disabled value="">Selecione</option>
          <option value="nome">Nome</option>
          <option value="cpf">CPF</option>
          <option value="email">Email</option>
        </select>
      </div>
    </div><br/><br/>
    <button type="submit" class="btn btn-primary">Buscar</button><br><br>
    <a href="/administrador/pessoa" class="btn btn-default">Listar todas as pessoas</a><br><br>
  </div>
</form>
<br><br><br>
<br><br><br>
<br><br><br>
<br><br><br>

@if(old('nome'))
  <div class="alert alert-success">
    <strong>Sucesso!</strong> 
      A pessoa {{ old('nome') }} foi cadastrado.
  </div>
@endif

<div>
  <a href="/administrador/formpessoa" class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> Cadastrar</a><br><br>
</div>
<!-- Paginação -->
<div class='row' style='text-align:center'>
  <ul class='pagination'>     
    @if($p_ant)
      <li><a class='btn btn-primary' href='/administrador/pessoa/{{$p_ant}}'><span class="glyphicon glyphicon-arrow-left"></span> Anterior </a></li>     
    @endif    

    @if(count($pessoas) == 10)
      <li><a href='/administrador/pessoa/{{$p_prox}}' class="btn btn-primary"><span class="glyphicon glyphicon-arrow-right"></span> Próximo </a></li>
    @endif
  </ul>
</div>
<br/>
<table class="table table-striped table-bordered table-hover">
  <tr>
    <th>ID</th>
    <th>Nome</th>
    <th>Sexo</th>
    <th>CPF</th>
    <th>Data de Nascimento</th>
    <th>Email</th>
    <th>Telefone 1</th>
    <th>Telefone 2</th>
    <th>Editar</th>
    <th>Excluir</th>
  </tr>
@forelse($pessoas as $p)
        <td>{{ $p->id }}</td>
        <td>{{ $p->nome }}</td>
        <td>{{ $p->sexo }}</td>
        <td>{{ $p->cpf }}</td>
        <td>{{ date('d/m/Y', strtotime($p->data_nascimento)) }}</td>
        <td>{{ $p->email }}</td>
        <td>{{ $p->telefone_1 }}</td>
        <td>{{ $p->telefone_2 }}</td>
        <td> 
          <a href="/administrador/formeditarpessoa/{{$p->id}}"> 
            <span class="glyphicon glyphicon-pencil"></span>
          </a>
        </td>
        <td> 
          <a href="#" class="glyphicon glyphicon-trash" data-toggle="modal" data-target="#{{$p->id}}"></a>
                <div id="{{$p->id}}" class="modal fade" role="dialog">
                  <div class="site-wrapper">
                    <div class="modal-dialog">                
                      <div class="modal-content">
                          <div class="modal-header">
                            <button type="button" class="close" data-dismiss="modal">&times;</button>
                            <h4 class="modal-title">Pessoa</h4>
                          </div>

                          <div class="modal-body">
                            <p>Deseja excluir a pessoa? <br> <h3><b>{{$p->nome}}</b></h3></p>
                          </div>

                          <div class="modal-footer">
                            <a href="/administrador/deletarpessoa/{{$p->id}}" class="btn btn-primary">Sim</a>
                            <a href="/administrador/pessoa" class="btn btn-default" data-dismiss="modal">Não</a>
                        </div>
                      </div>
            </div>
                  </div>
              </div>
          </td>
        </td>
      </tr>
  @empty
    <div class="alert alert-danger">
    Você não tem nenhuma pessoa cadastrada!.
  </div> 
  @endforelse
</table>
@stop

Falta arrumar ainda.

Bom, se funciona, tudo bem! Este é o primeiro passo... Fazer funcionar...

Depois vale a pena rever e avaliar se o código faz sentido, se é semantico... se não está confuso e refatora-lo caso precise.

Fico feliz em ter ajudado!

Não deu muito certo. :/

solução!

Qual foi o problema Yuri? Consegue detectar? Bom, aproveitando o momento, vou te passar o link de uma página que pode resolver o seu problema.

http://laravel.artesaos.org/docs/5.1/pagination

Espero que ajude. Caso não, por favor, descreva o que está acontecendo...