如何制作 laravel 分页组件?
how make a laravel pagination component?
我有一个带有后退和前进按钮的滑块组件,我想以分页方式获取数据,我该怎么做?
我只想在不使用 Vue.js 或 livewire 的情况下执行此操作,仅使用 laravel 、JS 和 JQuery.
首先,为什么要使用滑块来创建分页?有更好的方法,如延迟加载、过滤列和简单分页。我猜延迟加载最适合性能。
如果你非要创建一个滑块组件,只是想知道,你有多少数据?以及您要检索以筛选多少数据?想象一下,您的数据库中有超过 1.000.000 行,您肯定不想查询所有行以实时更新屏幕。为什么我告诉你 'query them all'?
我告诉你,如果你使用laravel默认分页(使用limit和offset)进行分页,这背后的流程是这样的:
- DB 将 select 您拥有的所有行
- DB 将根据限制参数限制您的行
- DB 将逐行扫描以匹配您想要的偏移量
- DB 将检索您想要的数据
有了这个流程,这就是为什么如果您有大量数据,分页(限制和偏移)不够好。解决方案是将您的分页逻辑从限制和偏移更改为这样的查询(案例:自动增量 id):
SELECT
*
FROM
payments
WHERE
Id > 15
LIMIT 20
或者对于降序的方式,你可以这样查询:
SELECT
*
FROM
payments
WHERE
Id < 50
ORDER BY Id DESC
LIMIT 20
然后在laravel中,发送一个包含分页数据的json。因此,在 javascript 中,您只需将分页数据与库或您自己的分页逻辑对齐即可。
Laravel 的查询生成器提供了一个 paginate
方法,可以为您提供 LengthAwarePaginator
。通常,您会使用 $items->links()
在 blade 视图中呈现它,但您可以将其结果转换为 JSON (https://laravel.com/docs/8.x/pagination#converting-results-to-json)。这样您就可以随心所欲地使用 JavaScript 中的结果。
我有一个带有后退和前进按钮的滑块组件,我想以分页方式获取数据,我该怎么做? 我只想在不使用 Vue.js 或 livewire 的情况下执行此操作,仅使用 laravel 、JS 和 JQuery.
首先,为什么要使用滑块来创建分页?有更好的方法,如延迟加载、过滤列和简单分页。我猜延迟加载最适合性能。
如果你非要创建一个滑块组件,只是想知道,你有多少数据?以及您要检索以筛选多少数据?想象一下,您的数据库中有超过 1.000.000 行,您肯定不想查询所有行以实时更新屏幕。为什么我告诉你 'query them all'?
我告诉你,如果你使用laravel默认分页(使用limit和offset)进行分页,这背后的流程是这样的:
- DB 将 select 您拥有的所有行
- DB 将根据限制参数限制您的行
- DB 将逐行扫描以匹配您想要的偏移量
- DB 将检索您想要的数据
有了这个流程,这就是为什么如果您有大量数据,分页(限制和偏移)不够好。解决方案是将您的分页逻辑从限制和偏移更改为这样的查询(案例:自动增量 id):
SELECT
*
FROM
payments
WHERE
Id > 15
LIMIT 20
或者对于降序的方式,你可以这样查询:
SELECT
*
FROM
payments
WHERE
Id < 50
ORDER BY Id DESC
LIMIT 20
然后在laravel中,发送一个包含分页数据的json。因此,在 javascript 中,您只需将分页数据与库或您自己的分页逻辑对齐即可。
Laravel 的查询生成器提供了一个 paginate
方法,可以为您提供 LengthAwarePaginator
。通常,您会使用 $items->links()
在 blade 视图中呈现它,但您可以将其结果转换为 JSON (https://laravel.com/docs/8.x/pagination#converting-results-to-json)。这样您就可以随心所欲地使用 JavaScript 中的结果。