Результаты поиска Laravel отображаются неправильно

#php #forms #laravel #search #laravel-5.2

#php #формы #laravel #Поиск #laravel-5

Вопрос:

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

 <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Inventory</title>
    <link rel="stylesheet" href="/css/libs.css">
    <link rel="stylesheet" href="/css/app.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  </head>
  <body>

    <nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
  <div class="navbar-header">
    <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
      <span class="sr-only">Toggle navigation</span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </button>
    <a class="navbar-brand" href="http://inventory.app:8000/computers/create" Inventory</a>
  </div>
  <div id="navbar" class="navbar-collapse collapse">
    <ul class="nav navbar-nav navbar-right">
      <li>
          {{ Form::open(['method' => 'GET', 'url'=>'computers/search']) }}
          {{ Form::input('search', 'q', null, ['placeholder' => 'Search...']) }}
          {{ Form::close() }}
      </li>
      <li><a href="http://inventory.app:8000/computers/create">Update Inventory</a></li>
      <li><a href="#">Logout</a></li>
    </ul>

  </div>
</div>
</nav>
  

Я использую ресурс маршрута для своей маршрутизации. Мой маршрут для моего поиска

Route::get(‘компьютеры / поиск’, ‘InventoriesController@search’);

Мой контроллер поиска выглядит следующим образом

 public function search()

        {
            $search = Request::get('search'); //<-- we use global request to get the param of URI

//            $search = Input::get('search');

            $inventories = Inventory::where('lastName','LIKE','%'.$search.'%')
               -> orwhere('firstName', 'LIKE','%'.$search.'%' )
                -> orwhere('department', 'LIKE','%'.$search.'%' )
                -> orwhere('building', 'LIKE','%'.$search.'%' )
                -> orwhere('room', 'LIKE','%'.$search.'%' )
                -> orwhere('manufacturer', 'LIKE','%'.$search.'%' )
                -> orwhere('device', 'LIKE','%'.$search.'%' )
                -> orwhere('model', 'LIKE','%'.$search.'%' )
                -> orwhere('tag', 'LIKE','%'.$search.'%' )
                -> orwhere('macAddress', 'LIKE','%'.$search.'%' )
                -> orwhere('status', 'LIKE','%'.$search.'%' )
                -> orwhere('comments', 'LIKE','%'.$search.'%' )
                ->get($search);




            return view('computers.search',compact('inventories'));
        }
  

Я попытался выполнить OrderBy(‘search’), но это ничего не дало. Моя таблица просто отображается, но она перенаправляет на маршрут поиска, потому что URL-адрес изменяется
Например http://inventory.app:8000/computers/search ?q = Dell

Ответ №1:

Как показано в вашем URL, переменная, которую вы ищете, — это q , not search . Так что получите это в своем запросе вместо этого:

 $search = Request::get('q');
  

Поскольку то, что вы ищете, скорее всего, не является столбцом, не используйте его в своем get() вызове. Просто получите все столбцы или только те, которые вы хотите

 ->get();
  

или

 ->get(['lastName','firstName','department',...]);
  

Комментарии:

1. Спасибо, Айнбер. Это сделало свое дело. Глупая ошибка с моей стороны!