为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel ajax 分页与原始集合

Laravel ajax 分页与原始集合

PHP
慕慕森 2022-07-16 17:39:04
我有一个产品目录,可以通过几个不同的选择和复选框元素进行过滤。过滤器操作SearchController通过 ajax 发布到用户过滤器时,结果会立即显示。搜索词/变量不会附加到 URL。我遇到了分页问题,因为默认的 Laravel 分页会重新加载页面,因此会丢失用户已经过滤的内容。我将分页更改为使用 ajax 以试图迅速解决问题。我的问题是 ajax 分页重新运行SearchController以使集合抵消结果。然后再次重置搜索条件,因为过滤器没有与分页 ajax 一起发布。我想在通过我的分页 ajax 调用时抵消原始集合。这个结果集是否存在并被重用?public function filter(Request $request, Stock $Stock){    // Enable query log    DB::enableQueryLog();    $Stock = $Stock->newQuery();    if($request->has('model')) {        $the_model = $request->model;        $request->request->add([$the_model => 1]);    }    if ($request->has('car') && $request->input('car') == 'true') {        $Stock->orWhere('car', 1);    }    if ($request->has('bike') && $request->input('bike') == 'true') {        $Stock->orWhere('bike', 1);    }    if ($request->has('productTypes_chosen')) {        $Stock->whereIn('productType', $request->productTypes_chosen);    }    if ($request->has('manufacturers_chosen')) {        $Stock->whereIn('manufacturer', $request->manufacturers_chosen);    }    $Stock->where('show_website', 1);    $stockItems = $Stock->get();    $stockItems = $Stock->paginate(15);    if($request->ajax()) {        $view = view('partials.filtered-results')->with(compact('stockItems'));        $view = $view->render();        return $view;    }}分页 AJAX$(function() {    $('body').on('click', '.pagination a', function(e) {        e.preventDefault();        var url = $(this).attr('href');        getStock(url);        window.history.pushState("", "", url);    });    function getStock(url) {        $.ajax({            url : url        }).done(function (data) {            $('.machines').html(data);            $('html, body').animate({                scrollTop: $('.machines').offset().top - 150            }, 'slow');        }).fail(function () {            alert('Stocklist could not be loaded.');        });    }});
查看完整描述

1 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

我相信要解决您的问题,您需要使用以下方法:


use Illuminate\Pagination\Paginator;


public function filter(Request $request, Stock $Stock)

{

    // Your filters here


    $page = $request->has('page') ?? 1;

    $limit = $request->has('limit') ?? 15;


    Paginator::currentPageResolver(function () use ($page) {

       return $page;

    });


    $stockItems = $Stock->paginate($limit);

}


查看完整回答
反对 回复 2022-07-16
  • 1 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信