قاعدة البياناتتعدد الصفحات

تعدد الصفحات

تمتلك Kawkab دعمًا مدمجًا لتعدد الصفحات. يمكنك ترقيم نتائج الاستعلام عن طريق ربط طريقة paginate.

تقبل طريقة paginate رقم الصفحة كمعامل أول وعدد الصفوف المطلوب جلبها كمعامل ثانٍ. داخليًا، نقوم بتنفيذ استعلام إضافي لحساب العدد الإجمالي للصفوف.

الاستخدام الأساسي

const users = await db.table('users')
  .where('vote', '>', 1)
  .paginate(2, 15); // instanceof Paginator
 
const users = await User.query()
  .where('vote', '>', 1)
  .paginate(1, 15); // instanceof Paginator
 
const users = await db.table('users')
  .where('vote', '>', 1)
  .forPage(2, 15)
  .get(); // instanceof Array
 
const users = await User.query()
  .where('vote', '>', 1)
  .forPage(1, 15)
  .get(); // instanceof Collection
 
users.map(user => {
  //
});

إذا لم يتم تحديده، فإن عدد الصفوف لكل صفحة يكون افتراضيًا 15. إذا كنت تستخدم النماذج، يمكنك أيضًا تعيين السمة perPage كعدد الصفحات الافتراضي لكل نموذج.

class Post extends Model {}
class User extends Model {
  perPage = 20;
}
 
const posts = await Post.query().paginate();
console.log(posts.perPage()); // 15
 
const users = await User.query().paginate();
console.log(users.perPage()); // 20

تعيد طريقة paginate مثيلًا من Paginator. يحتوي على البيانات الوصفية للترقيم، إلى جانب الصفوف التي تم جلبها.

يوفر كل مثيل من Paginator معلومات إضافية عن الترقيم عبر الطرق التالية:

الطريقةالوصف
paginator.count()الحصول على عدد العناصر للصفحة الحالية.
paginator.currentPage()الحصول على رقم الصفحة الحالية.
paginator.hasMorePages()تحديد ما إذا كان هناك المزيد من العناصر في مخزن البيانات.
paginator.items()الحصول على العناصر للصفحة الحالية.
paginator.lastPage()الحصول على رقم الصفحة الأخيرة المتاحة.
paginator.perPage()عدد العناصر التي يجب عرضها لكل صفحة.
paginator.total()تحديد العدد الإجمالي للعناصر المطابقة في مخزن البيانات.

التحويلات إلى كائن/JSON

يمكنك أيضًا تسلسل نتائج المرقم إلى كائن/JSON عن طريق استدعاء طريقة toData أو toJson. يعيد أسماء المفاتيح في صيغة snake_case بشكل افتراضي. ومع ذلك، يمكنك تمرير استراتيجية تسمية لتجاوز الاتفاقية الافتراضية.

{
  "total": 45,
  "per_page": 15,
  "current_page": 1,
  "last_page": 3,
  "count": 15,
  "data": [
    {
      // Record...
    },
    {
      // Record...
    }
  ],
}

سيقوم المرقم بتحويله إلى JSON عند تحويله إلى سلسلة، بحيث يمكن استخدامه مباشرة في مسار التطبيق أو وحدة التحكم. سيقوم تطبيق express/Koa الخاص بك بتسلسل JSON تلقائيًا:

const users = await User.query().paginate(req.query.page || 1);
 
return res.ok({
    "status": true,
    "users": users
});