【问题标题】:Multiple checkbox filter using form with pagination in laravel在 laravel 中使用带有分页的表单的多个复选框过滤器
【发布时间】:2019-02-28 15:58:28
【问题描述】:

我正在使用带有 post 方法的表单并且有多个复选框,当我选中一个复选框并提交表单时,它可以正常工作并且结果带有分页,但是当我单击分页的下一个链接时它显示 404 页面的错误不是找到了。

查看:-

<form action="{{ route('trainer.filter') }}" method="post">
        @csrf
          <!-- Name -->
          <input type="text" class="form-control mb-4" placeholder="Search" name="keywords" aria-label="Search">
          <h6 class="black-text mt-2 "><b class="category">Areas of Experties</b></h6>
          <!-- Copy -->
          @foreach ($expertise_areas as $expertise_area)
            <div class="custom-control custom-checkbox mb-1" style="padding-left: 3px;">
              <label for="expertise_area">
                <input type="checkbox" name="expertise_area[]" value="{{ $expertise_area->id }}">&nbsp;&nbsp;{{ $expertise_area->name }}
              </label>
            </div>
          @endforeach

          <!-- State -->
          <h6 class="black-text mt-2 "><b class="category">Trainer Location (STATE)</b></h6>
          <select class="form-default browser-default custom-select mb-4" name="state" id="state">
             <option selected disabled>Choose State</option>
             @foreach ($states as $state)
             <option value="{{ $state->id }}">{{ $state->name }}</option>
             @endforeach
          </select>
          <h6 class="black-text mt-2 "><b class="category">Trainer Location (City)</b></h6>
          <!-- City -->
          <select class="browser-default custom-select mb-4" name="city" id="city">
             <option selected disabled>Choose City</option>
             @foreach ($cities as $city)
             <option value="{{ $city->id }}">{{ $city->name }}</option>
             @endforeach
          </select>
          <!-- Send button -->
          <button class="btn btn-info btn-block" type="submit">Search</button>
       </form>

分页链接:-

{{ $trainers->links() }}

路线:-

Route::post('trainer/filter', 'HomeController@trainerFilter')->name('trainer.filter');

控制器:-

public function trainerFilter(Request $request)
{
    if ($request->has('keywords')) {
        $trainers = Trainer::where('name', 'LIKE', '%'.$request->keywords.'%')
                    ->orWhere('state_name', 'LIKE', '%'.$request->keywords.'%')
                    ->orWhere('city_name', 'LIKE', '%'.$request->keywords.'%')->orderBy('ranking', 'asc')->paginate(5);
    }}

【问题讨论】:

  • 控制器代码似乎不是一个最小的例子,请你补充一些细节。

标签: laravel pagination


【解决方案1】:

我认为您错过了通过 resultset 的不同页面在 controller 内的 where持久化使用的参数 .

查看您发布的控制器代码,您可以尝试将keywords 参数附加到分页链接,类似这样:

{{ $trainers->appends(['keywords' => $keywords])->links() }}

记得将['keywords' =&gt; $request-&gt;keywords] 传递给视图。

【讨论】:

  • 我没有发送关键字,当我选中一个复选框时,我只发送名为 checkbox 的专业知识区域,有多个搜索,如输入类型文本和复选框和选择框
  • 查看您的控制器代码,您仅使用keywords 参数来过滤$trainers,我的答案基于您发布的代码,我想我给您的不仅仅是解决您问题的提示分页问题。
  • 好的,兄弟,我明白了。实际上我正在发送更多搜索项目。例如名为关键字的文本框、名为expertise_area 的复选框以及名为州和城市的选择框。
  • @krish-bhardwaj 只需附加更多参数,就像我在答案中显示的那样。如果对您有帮助,请点赞并接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 2019-03-01
相关资源
最近更新 更多