Error 1054 Laravel

1

I'm having a problem in paging, when I'm going to change the page, it gives a 1054 error

Controller

public function lista(Request $request)
    {   

       $pessoasQuery = pessoas::query();

       foreach ($request->all() as $campo => $valor) 
       {  
         if ('status' == '') 
          {

            $pessoasQuery->where('status', 'atv');

          } 
         if ($valor == '') 
         {}else
          {             
            if (in_array($campo, ['observacao', 'nome_fantasia', 'razao_social' , 'cpf_cnpj'])) 
            {
              $pessoasQuery->where($campo, 'like', '%' . $valor . '%');
              continue;
            }
           $pessoasQuery->where($campo, $valor);
          }
       }
       //$pessoasQuery= pessoas::paginate(5);
       $clientes = $pessoasQuery->where('tipo_pessoa', '=', 'cliente')->paginate(2);


        //$clientes = pessoas::paginate(2);       
      return view('Pessoa.clientes') -> with('clientes', $clientes);
      // return view('Pessoa.clientes', compact(['clientes']));
    }       

View

    @foreach ($clientes as $cliente) 
      <tr class="cliente">
         <td>{{ $cliente->id }}</td>
         <td>{{ $cliente->razao_social }}</td>
         <td>{{ $cliente->nome_fantasia }}</td>
         <td>{{ $cliente->cpf_cnpj }}</td>
         <td>{{ \App\Utils\Formatador::formataTipo($cliente->tipo) }}</td>
         <td>{{ $cliente->observacao }}</td>
         <td class="text-center"> 
            <a href="VisualizaPessoa/{{ $cliente->id }}" >
                <i class="fa fa-search"></i>
            </a>
         </td>

        <td>
      @endforeach


        </td>

    </tr>

</table>
<div class="card-footer">
    {{$clientes->count()}}
    {{$clientes->links()}}
</div>
@stop

Error

  

"SQLSTATE [42S22]: Column not found: 1054 Unknown column 'page' in 'where clause' (SQL: select count (*) as aggregate from pessoas where page = 2 and tipo_pessoa = client ) ◀ "

    
asked by anonymous 21.08.2018 / 03:05

1 answer

0

You are passing the "page" parameter in your query, it happened because of the way you did using a foreach to scroll through all the request fields and playing each field in the query. The code below should solve your problem.

$campos = $request->all(); // Atribui todos os parâmetros passado no request

// Você deve chamar esse método antes de realizar a consulta
// Esse método vai dizer em qual página você está.
Paginator::currentPageResolver( function() use ( $campos['page'] ) {
    return $campos['page'];
});

// No lugar de você percorrer todos os campos do request, 
// você pode usar o método when do Laravel, 
// esse método só é executado quando o valor passado no primeiro parâmetro
// seja diferente de null
$clientes = $pessoasQuery->where('tipo_pessoa', '=', 'cliente')
                         ->when( $campos['observacao'], function( $query ) use( $campos['observacao'] ) {
                            return $query->where( 'observacao', 'like', '%' . $campo['observacao'] . '%');
                         })->paginate(2);

Q: You can use the when method in all fields.

    
21.08.2018 / 14:36