Laravel Форма поиска с фильтрами - PullRequest
1 голос
/ 29 февраля 2020

Я хочу реализовать поисковую форму в Laravel, я просматривал каждое видео на YouTube, чтобы сделать это, и перепробовал много учебников, но мой код не работает ...; (

Пожалуйста, помогите исправить мой код ...

Спасибо за помощь !!! = D


Файл web. php В моих маршрутах есть ресурс с CRUD клиентами, который также будет поиск, который я хочу реализовать фильтры, по имени, по состоянию, и т. д. c ...

Route::resource('clients', 'ClientController');
Route::any('/search', 'ClientController@search')->name('search');

File ClientController. php Функция поиска проверена реализовать поиск, но я знаю, что это совершенно неправильно, но я не нахожу в Google никакого четкого учебника, который я понял, как правильно делать ...

public function search(Request $request)
{
    $nome = $request->nome;
    $uf = $request->uf;
    $pesquisa = Client::where('nome', 'like', '%'.$nome.'%')
    ->orderBy('nome')
    ->paginate(5);

    return view('clients.index')
        ->with('pesquisa', $pesquisa)
        ->with('clients', $clients);
}

Файл index.blade. php Это моя страница в Front-end ... Имеет таблицу всех клиентов, а сверху я хочу реализовать поиск с фильтрами по имени и состоянию ...

@section('title', 'Clientes')

@section('content_header')
    <h1>
      Clientes
      &nbsp;&nbsp;
      <a href="{{ route('clients.create') }}" class="btn btn-sm btn-success">
        Novo Cliente
      </a>  
    </h1>  
@endsection

@section('content')
<div class="box">
  <div class="box-header">
    <nobr>
    <form action="/painel/search" method="POST" class="form form-inline" role="search">
      @csrf
      <div class="col-2">
        <input type="text" name="nome" class="form-control" placeholder="Nome">
        &nbsp;
        <input type="text" name="uf" class="form-control" placeholder="UF">
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <button type="submit" class="btn btn-primary">Pesquisar</button>
       </div>
    </form>
    </nobr>
  </div>
</div>

</br>

<div class="card">
    <div class="card-body">
        <table class="table table-hover">
            <thead>
                  <tr>
                      <th>Nome</th>
                      <th>UF</th>
                      <th>Telefone</th>
                      <th>
                        <nobr>Ações</nobr>
                      </th>
                  </tr>
                </thead>
            <tbody>
                  @foreach($clients as $client)
                    <tr>
                      <td>{{$client->nome}}</td>
                      <td>{{$client->uf}}</td>
                      <td>{{$client->telefone}}</td>
                      <td>
                        <nobr>
                          <a href="{{ route('clients.edit', ['client' => $client->id]) }}" class="btn btn-sm btn-info">Editar</a>

                          <form class="d-inline" method="POST" 
                              action="{{ route('clients.destroy', ['client' => $client->id]) }}" 
                              onsubmit="return confirm('Tem certeza que deseja excluir o cliente?')">
                              @method('DELETE')
                              @csrf
                              <button class="btn btn-sm btn-danger">Excluir</button>
                          </form>

                        </nobr>
                      </td>
                    </tr>        
                  @endforeach

                </tbody>
        </table>
    </div>   
</div>

{{ $clients->links() }}

@endsection

1 Ответ

1 голос
/ 29 февраля 2020

В вашем контроллере не определена переменная $clients, поэтому нет смысла включать ее в return. Кроме того, с вашей точки зрения, вы перебираете эту переменную oop, и я думаю, что если вы просто измените имя переменной, в которой сохраните результат запроса, с $pesquisa на $clients, все будет работать:

public function search(Request $request)
{
    $nome = $request->nome;

    $clients = Client::where('nome', 'like', '%'.$nome.'%')
        ->orderBy('nome')
        ->paginate(5);

    return view('clients.index')
        ->with('clients', $clients);
}

Кроме того, ваша форма действий может быть неправильной, попробуйте использовать вместо имени маршрута имя:

<form action="{{ route('search') }}" //...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...