Как отобразить результаты поиска в laravel из табличных данных?

#javascript #php #ajax #laravel

#javascript #php #ajax #laravel

Вопрос:

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

вот как выглядит моя таблица, внутри post/index.blade.php которой расширяется layouts.app , содержащая скрипты

 <table class="..." id="table">
      <thead>
      <tr>
        <th>No.</th>
        <th>Student ID</th>
        <th>Student Name</th>
        <th>
          <a href="#" class="create-modal btn btn-success btn-sm">
            <i class="glyphicon glyphicon-plus"></i>
          </a>
        </th>
      </tr>
      </thead>
      <tbody>
      {{ csrf_field() }}
      <?php  $no=1; ?>
      @foreach ($post as $value)
        <tr class="post{{$value->id}}">
          <td>{{ $no   }}</td>
          <td>{{ $value->student_id }}</td>
          <td>{{ $value->student_name }}</td>
          <td>
            <a class="show-modal btn btn-info btn-sm" 
            data-id="{{$value->id}}" 
            data-student_id="{{$value->student_id}}" 
            data-student_name="{{$value->student_name}}"
            >
              <i class="fa fa-eye"></i>
            </a>
            <a class="edit-modal btn btn-warning btn-sm" 
            data-id="{{$value->id}}" 
            data-student_id="{{$value->student_id}}" 
            data-student_name="{{$value->student_name}}"
            >
              <i class="glyphicon glyphicon-pencil"></i>
            </a>
            <a  class="delete-modal btn btn-danger btn-sm" 
            data-id="{{$value->id}}" 
            data-student_id="{{$value->student_id}}" 
            data-student_name="{{$value->student_name}}"
            >
              <i class="glyphicon glyphicon-trash"></i>
            </a>
          </td>
        </tr>
        </tbody>
      @endforeach
    </table>
 

и действие поиска внутри контроллера

 function action(Request $request)
    {
     if($request->ajax())
     {
      $output = '';
      $query = $request->get('query');
      if($query != '')
      {
       $data = DB::table('posts')
         ->where('student_id', 'like', '%'.$query.'%')
         ->orWhere('student_name', 'like', '%'.$query.'%')        
         ->orderBy('student_id', 'desc')
         ->get();
         
      }
      else
      {
       $data = DB::table('posts')
         ->orderBy('student_id', 'desc')
         ->get();
      }
      $total_row = $data->count();
      if($total_row > 0)
      {
       foreach($data as $row)
       {
        $output .= '
        <tr>
         <td>'.$row->student_id.'</td>
         <td>'.$row->student_name.'</td>         
        </tr>
        ';
       }
      }
      else
      {
       $output = '
       <tr>
        <td align="center" colspan="5">No Data Found</td>
       </tr>
       ';
      }
      $data = array(
       'table_data'  => $output,
       'total_data'  => $total_row
      );

      echo json_encode($data);
     }
    }
} 
 

и это скрипт внутри layouts/app.blade.php , чтобы сделать функцию поиска

 //  search function
$(document).ready(function(){

 fetch_customer_data();

 function fetch_customer_data(query = '')
 {
  $.ajax({
   url:"{{ route('post.action') }}",
   method:'GET',
   data:{query:query},
   dataType:'json',
   success:function(data)
   {
    $('tbody').html(data.table_data);
    $('#total_records').text(data.total_data);
   }
  })
 }

 $(document).on('keyup', '#search', function(){
  var query = $(this).val();
  fetch_customer_data(query);
 });
});
 

и я добавил маршрут для поиска внутри группы маршрутов

 Route::group(['middleware' => ['web']], function() {
  Route::resource('post','PostController');
  Route::get('post/action', 'PostController@action')->name('post.action');
});
 

и вот как выглядит индекс внутри контроллера

 class PostController extends Controller
{
    public function index(){
      $post = Post::paginate(4);
      return view('post.index',compact('post'));
    }
 

мой URL выглядит так sms.test/post

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

1. почему не Datatable?

2. да, это база данных. все данные хранятся в базе данных @MasudulHasanShawon

3. вы проверяли содержимое data ? что это возвращает?

4. @Swati если вы имеете в виду это $data = DB::table('posts') в контроллере, я предполагаю, что он возвращает содержимое таблицы posts , но я не уверен, что это действительно так, и я не знаю, как проверить, так это или нет:(

Ответ №1:

после половины дня проб и ошибок мой маршрут был неправильным

 Route::group(['middleware' => ['web']], function() {
  Route::resource('post','PostController');
  Route::get('post/action', 'PostController@action')->name('post.action');
});
 

Я перешел post/ от этого Route::get('post/action', 'PostController@action')->name('post.action');

итак, теперь это выглядит так Route::get('action', 'PostController@action')->name('post.action');

Я не понимаю, почему, но сейчас это работает, лол