【问题标题】:laravel pagination with search wrong links带有搜索错误链接的laravel分页
【发布时间】:2026-02-14 13:45:01
【问题描述】:

我正在尝试使用带有搜索功能的 laravel 分页。

到目前为止,我已经尝试过使用 laravel 分页进行实时搜索并且一直失败,以及使用分页进行正常搜索,我得到了更好的结果但仍然无法正常工作。

这是我上次尝试使用分页进行正常搜索的方法:

项目控制器:

public function index()
{
    $projects = Project::paginate(6);
    return view('dashboard.projects.index',['projects' => $projects]);
}

public function search(Request $request)
{
    $q = $request->input('q');
    if(!empty($q)){
        //dd("search");
        $projects = Project::where('name', 'LIKE', '%' . $q  . "%")->orderBy('created_at','desc')->paginate(6)->setPath('');
        $projects->appends(['q' =>  $request->input('q')]);
        return view ( 'dashboard.projects.index')->with('projects',$projects);
    }
    return redirect('/dashboard/projects/');
}

dashboard.projects.index

        <div class="container-fluid">
            <div class="row section-primary">
                @foreach($projects as $project)
                    <div class="col-12 col-md-4 mb-2">
                        <div class="card project h-100">
                            <div class="card-header">
                                <h4>{{$project->name}}</h4>
                            </div>
                            <div class="card-body">
                                <p><strong>Project Manager:</strong> {{$project->manager_name}}</p>
                                <p class="description">{{ substr($project->description, 0,  110) }}...</p>
                                <div class="display-flex">
                                    <div><a href="">View</a></div>
                                    <div><a href="{{url('/dashboard/projects/'. $project->id. '/edit')}}">Edit</a></div>
                                    <div><a href="#">Members</a></div>
                                    <div>
                                        {!!Form::open(['action' => ['ProjectController@destroy', $project->id], 'method' => 'POST','class' => 'form-link'])!!}
                                        {{Form::hidden('_method', 'DELETE')}}
                                        {{Form::submit('Delete', ['class' => 'button-link'])}}
                                        {!!Form::close()!!}
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                @endforeach
            </div>
        </div>
        <div>
            {!! $projects->links()!!}
        </div>

当我转到仪表板/项目和分页工作时,代码工作正常。 搜索有效,但分页失败。 当我按下搜索按钮时,它首先进入仪表板/项目/搜索 然后,当我在分页上按第 2 页按钮时,它会转到仪表板/项目/搜索?q=project&page=2,这里它正在请求不相关的显示功能。

PS:任何对分页实时搜索的额外帮助都会非常棒。

【问题讨论】:

    标签: laravel


    【解决方案1】:

    我已经设法解决了这个问题,对于任何面临同样问题的人,我在我的路线中使用了:

    Route::resource('/dashboard/projects', 'ProjectController');
    Route::any('/dashboard/projects/search', 'ProjectController@search');
    

    由于某些原因,/dashboard/projects/search 不是一个好主意,因为它要进入由资源定义的节目,我所要做的就是改变:

    Route::any('/dashboard/projects/search', 'ProjectController@search');
    

    Route::any('/dashboard/project/search', 'ProjectController@search');
    

    所以在我找到/学习更好的解决方案之前,它们看起来像是不同的路线。

    其他解决方案是将搜索路线放在首位,例如:

    Route::any('/dashboard/projects/search', 'ProjectController@search');    
    Route::resource('/dashboard/projects', 'ProjectController');
    

    【讨论】:

      【解决方案2】:

      在 larvel => 6 版本中:

      larvel 6,7,8 版本中不再存在输入。使用 Request 而不是 Input。

      $q = $request-&gt;input('q');改为$q = $request-&gt;q;

      你的 ProjectController:

      use Illuminate\Support\Facades\Request;
      ..
      ..
          public function search(Request $request)
          {
              $q = $request->q;
              if(!empty($q)){
                  //dd("search");
                  $projects = Project::where('name', 'LIKE', '%' . $q  . "%")->orderBy('created_at','desc')->paginate(6)->setPath('');
                  $projects->appends(['q' =>  $request->input('q')]);
                  return view ( 'dashboard.projects.index')->with('projects',$projects);
              }
              return redirect('/dashboard/projects/');
          }
      

      【讨论】: