قاعدة البيانات

أداة Sumor Cloud.
مزيد من التوثيق موصل قاعدة بيانات لـ MySQL، وما إلى ذلك. مبني على entity.

CI Test Coverage Audit

التثبيت

npm i @sumor/database --save

المتطلبات الأساسية

إصدار Node.JS

تتطلب إصدار Node.JS 18.x أو أعلى

require Node.JS ES module

نظرًا لأن هذه الحزمة مكتوبة بلغة ES module، يرجى تغيير الكود التالي في ملف package.json الخاص بك:

{
  "type": "module"
}

الاستخدام

تثبيت قاعدة البيانات

يمكنك استخدام طريقة التثبيت لتثبيت entity و view على قاعدة البيانات.

database.install(config, [resource path], [resource data])

الحالة 1: تثبيت entity و view من مسار المورد، سيتم تحميل data/entity و data/view من جذر المشروع.

import database from '@sumor/database'

const config = {
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'database',
  port: 3306
}

await database.install(config.database, process.cwd() + '/data')

الحالة 2: تثبيت entity و view من بيانات المورد، سيتم تحميل data/entity و data/view من كائن البيانات.

import database from '@sumor/database'

await database.install(config, {
  entity: {
    Car: {
      property: {
        brand: {
          type: 'string',
          length: 100
        },
        model: {
          type: 'string',
          length: 100
        }
      }
    }
  },
  view: {}
})

الاستخدام العام

import database from '@sumor/database'

const config = {
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'database',
  port: 3306
}

// الحصول على client مع pool الاتصالات
const client = await database.client(config)

// الحصول على الاتصال
const db = await client.connect()

// تعيين مستخدم التشغيل
db.setUser('tester')

// إنشاء سجل
const car1Id = await db.insert('Car', {
  brand: 'BMW',
  model: 'X5'
})
const car2Id = await db.insert('Car', {
  brand: 'BMW',
  model: 'X6'
})

// قراءة السجل
const car = await db.single('Car', { id: carId })
// car = {id: car1Id, brand: 'BMW', model: 'X5'}

// استعلام السجلات
const cars = await db.query('Car', {
  brand: 'BMW'
})
// cars = [{id: car1Id, brand: 'BMW', model: 'X5'}, {id: car2Id, brand: 'BMW', model: 'X6'}]

// عد السجلات
const count = await db.count('Car', {
  brand: 'BMW'
})
// count = 2

// تحديث السجل
await db.update(
  'Car',
  { id: car1Id },
  {
    brand: 'BMW',
    model: 'X5M'
  }
)

// ضمان السجل
await db.ensure('Car', ['brand'], {
  brand: 'BMW',
  model: 'X5C'
})
// لن يتم إدراج السجل إذا كانت العلامة التجارية 'BMW' موجودة بالفعل

// تعديل السجل
await db.modify('Car', ['brand'], {
  brand: 'BMW',
  model: 'X5C'
})
// سيتم تحديث نموذج السجل إذا كانت العلامة التجارية 'BMW' موجودة بالفعل

// حذف السجل
await db.delete('Car', { id: car1Id })

// إغلاق الاتصال
await db.commit()

// إلغاء التراجع
await db.rollback()

// إغلاق الاتصال
await db.release()

// تدمير الclient عند إيقاف تشغيل الخادم
await client.destroy()

خيارات الاستعلام

// استعلام السجلات مع خيارات
const cars = await db.select(
  'Car',
  {
    brand: 'BMW'
  },
  {
    term: 'X5',
    termRange: ['model'],
    top: 10,
    skip: 0
  }
)

خيارات تعريف entity

Index

يمكنك إضافة مصفوفة index إلى تعريف entity لإنشاء فهرس على الجدول، افتراضيًا، سيتم إنشاء فهرس على الحقل id.

الانضمام

يمكنك إضافة كائن join إلى تعريف entity لإنشاء انضمام على الجدول. مثل المثال أدناه، سيتم إنشاء حقل userId في entity Car.

import database from '@sumor/database'

const config = {
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'database',
  port: 3306
}

await database.install(config, {
  entity: {
    Car: {
      property: {
        brand: {
          type: 'string',
          length: 100
        },
        model: {
          type: 'string',
          length: 100
        }
      },
      index: ['userId'],
      join: {
        user: 'User'
      }
    }
  },
  view: {}
})