doko1975's avatar

Dropdown search

Hello,

i want to implement a dropdown search to get the datasets in the database. Which is the best way to implement this? Do i need to install any package or is it possible to search without packages?

0 likes
6 replies
teos_97's avatar

I was following the Let’s build a forum using TDD series by Jeffrey and there is a video he talks about implementing instant search. He also shows how to use Laravel scout and Algolia, which I loved and ended up using myself as its very powerful and extremely easy to implement. Have a look here -> https://laracasts.com/series/lets-build-a-forum-with-laravel

Episode 94

doko1975's avatar

How about yajra? Is this good for a small project?

stef25's avatar

What do you mean by "a dropdown search to get the datasets in the database" ?

If by "dropdown search" you mean a search field in a dropdown menu, check out Select2: https://select2.org/data-sources/ajax

yajra is a datatables wrapper which doesn't really have anything to do with search or dropdowns.

doko1975's avatar

i have tried to understand how it works but it does not run. i get the message Missing required parameters for [Route: cablelists.show] [URI: cablelists/{cablelist}]. (View: C:\xampp\htdocs\KautexCabellist\resources\views\home.blade.php)

Function of the controller.

        public function show(Request $request)
        {

       if(request()->ajax())
       {
      if(!empty($request->cablelists.ordernumber_id))
      {
       $data = DB::table('cablelists')
         ->select('cablelistscol', 'cablename_id', 'lengh', 'ordernumber_id')
         ->where($request->cablelists.ordernumber_id)
         ->get();
      }
      else
      {
       $data = DB::table('cablelists')
         ->select('cablelistscol', 'cablename_id', 'lengh', 'ordernumber_id')
         ->get();
      }
      return datatables()->of($data)->make(true);
    }

    $ordernumbers = Ordernumber::with('cablelist')->select(['ordernumberscol','idordernumbers'])->get();
     return view('cablelist.show')->with('ordernumbers',$ordernumbers);
   }

View

<html>
 <head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Laravel 5.8 - Individual Column Search in Datatables using Ajax</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
  <script src="https://cdn.datatables.net/1.10.12/js/dataTables.bootstrap.min.js"></script>
  <link rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/dataTables.bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
 </head>
 <body>
  <div class="container">
     <br />
     <h3 align="center">Laravel 5.8 - Custom Search in Datatables using Ajax</h3>
     <br />
            <br />
            <div class="row">
                <div class="col-md-4"></div>
                <div class="col-md-4">
                    <div class="form-group">
                        <select name="ordernumber_id" id="ordernumber_id" class="form-control" required>
                            <option value="">Wähle Auftragsnummer aus</option>
                            @foreach($ordernumbers as $ordernumber)
                            <option value="{{ $ordernumber->idordernumbers}}">{{ $ordernumber->ordernumberscol}}</option>
                            @endforeach
                        </select>
                    </div>

                    <div class="form-group" align="center">
                        <button type="button" name="filter" id="filter" class="btn btn-info">Filter</button>

                        <button type="button" name="reset" id="reset" class="btn btn-default">Reset</button>
                    </div>
                </div>
                <div class="col-md-4"></div>
            </div>
            <br />
   <div class="table-responsive">
     <table id="cablelist_data" class="table table-bordered table-striped">
                     <thead>
                         <tr>
                           <th>idcablelists</th>
                           <th>cablelistscol</th>
                           <th>cablename_id</th>
                           <th>lengh</th>
                           <th>ordernumber_id</th>
                         </tr>
                     </thead>
                 </table>
    </div>
             <br />
             <br />
  </div>
 </body>
</html>

<script>
$(document).ready(function(){

    fill_datatable();

    function fill_datatable(ordernumber_id = '')
    {
        var dataTable = $('#cablelist_data').DataTable({
            processing: true,
            serverSide: true,
            ajax:{
              url: "{{ route('cablelists.show') }}",
              data:{ordernumber_id:ordernumber_id}
          },
          columns: [
              {
                  data:'idcablelists',
                  name:'idcablelists'
              },
              {
                  data:'cablelistscol',
                  name:'cablelistscol'
              },
              {
                  data:'cablename_id',
                  name:'cablename_id'
              },
              {
                  data:'lengh',
                  name:'lengh'
              },
              {
                  data:'ordernumber_id',
                  name:'ordernumber_id'
              }
          ]
      });
  }

  $('#filter').click(function(){
      var ordernumber_id = $('#ordernumber_id').val();

      if(ordernumber_id != '' &&  ordernumber_id != '')
      {
          $('#cablelist_data').DataTable().destroy();
          fill_datatable(ordernumber_id);
      }
      else
      {
          alert('Select filter option');
      }
  });

  $('#reset').click(function(){
      $('#ordernumber_id').val('');
      $('#cablelist_data').DataTable().destroy();
      fill_datatable();
  });

});
</script>

My route:

Route::get('cablelists/{cablelist}', 'CablelistsController@show')->name('cablelists.show');

Please help ;).

doko1975's avatar

My route has to be

Route::get('cablelists/show', 'CablelistsController@show')->name('cablelists.show');

but i can`t get any results.

doko1975's avatar

In the view using ajax how can i displaying foreign key name instead of the id?

Please or to participate in this conversation.