Cursor Pagination در لاراول

اگر با صفحه‌بندی‌های لاراول (pagination) کار کرده باشین می‌دانید که نحوه ی کار آنها به چه صورت است

Laravel Pagination
Laravel Pagination


ایجاد چنین صفحه بندی در لاراول اصلا کار سختی نیست، شما می‌توانید با نوشتن کد زیر یک صفحه بندی آماده در لاراول ایجاد کنید.

use App\Models\User;

$users = User::paginate(15);
$users = User::where('votes', '>', 100)->simplePaginate(15);
https://laravel.com/docs/8.x/pagination




Laravel Cursor Pagination

حالا در نسخه‌ی لاراول 8.41 متود جدیدی در لاراول اضافه خواهد شد که صفحه‌بندی را بسیار بهینه‌تر و کارآمد‌تر از نمونه‌های قبلی آن خواهد کرد.

$users = User::orderBy('id')->cursorPaginate(10);

اما این متود چه تفاوتی با متودهای قبلی دارد؟

اگر خاطرتان باشد در متودهای قبلی صفحه بندی لاراول آدرس url لینکهای صفحه بندی به صورت زیر بود

http://127.0.0.1:8000/users?page=2


اما در نسخه‌ی جدید این متود آدرسهای url به صورت یک رشته‌ی یونیک در خواهد آمد لذا کاربران دیگر نمی‌توانند با وارد کردن آدرس https://example.com/user?page=3 مثلا به صفحه‌ی سوم سایت شما دسترسی داشته باشند و برای دیدن صفحات دیگر حتما باید وارد صفحه‌ی اول سایت شما شوند.


{
  &quotdata&quot: [
    {
      &quotid&quot: 1,
      &quotname&quot: &quotNona Wilkinson&quot,
      &quotemail&quot: &quotstephen68@example.com&quot,
      &quotemail_verified_at&quot: &quot2021-05-12T23:21:19.000000Z&quot,
      &quotcreated_at&quot: &quot2021-05-12T23:21:19.000000Z&quot,
      &quotupdated_at&quot: &quot2021-05-12T23:21:19.000000Z&quot
    },
    {
      &quotid&quot: 2,
      &quotname&quot: &quotTitus Feeney Sr.&quot,
      &quotemail&quot: &quotoklein@example.com&quot,
      &quotemail_verified_at&quot: &quot2021-05-12T23:21:19.000000Z&quot,
      &quotcreated_at&quot: &quot2021-05-12T23:21:19.000000Z&quot,
      &quotupdated_at&quot: &quot2021-05-12T23:21:19.000000Z&quot
    },
    {...}
  ],
  &quotpath&quot: &quothttp://127.0.0.1:8000/users&quot,
  &quotper_page&quot: 10,
  &quotnext_page_url&quot: &quothttp://127.0.0.1:8000/users?cursor=eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0&quot,
  &quotprev_page_url&quot: null
}

همچنین به گفته‌ی سازندگان این متود، این مدل صفحه بندی برای کار با بیگ‌دیتا، جداول بزرگ و API بسیار بهینه‌تر و کارآمد‌تر عمل می‌کند.