logologo
البدء
الدليل
التطوير
الإضافات
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
البدء
الدليل
التطوير
الإضافات
API
logologo
API Overview

@nocobase/auth

AuthManager
Auth
BaseAuth

@nocobase/cache

CacheManager
التخزين المؤقت

@nocobase/cli

NocoBase CLI
متغيرات البيئة العامة

@nocobase/client

التطبيق
إضافة

@nocobase/database

مجموعة
الحقل

interfaces

BaseInterface
عوامل التصفية

RelationRepository

BelongsToManyRepository
belongs-to-repository
HasManyRepository
HasOneRepository
المستودع (Repository)

shared

create-options
destroy-options
find-one
transaction
update-options

@nocobase/data-source-manager

DataSourceManager
DataSource (تجريدي)
ICollectionManager
ICollection
IField
IModel
IRepository

@nocobase/flow-engine

مدير مصدر البيانات
سياق سير العمل
FlowEngine
FlowModel
مصدر سير العمل

@nocobase/logger

المسجل

@nocobase/server

AppCommand
التطبيق
AuditManager
السياق
الهجرة
إضافة

@nocobase/sdk

Auth
التخزين

@nocobase/telemetry

المقياس
Telemetry
التتبع
Previous Pageمجموعة
Next PageBaseInterface
إشعار الترجمة بالذكاء الاصطناعي

تمت ترجمة هذه الوثائق تلقائيًا بواسطة الذكاء الاصطناعي.

#الحقل

#نظرة عامة

يمثل هذا القسم فئة إدارة حقول المجموعة (فئة مجردة). وهي أيضًا الفئة الأساسية لجميع أنواع الحقول، حيث يتم تنفيذ أي نوع حقل آخر عن طريق وراثة هذه الفئة.

لمعرفة كيفية تخصيص الحقول، يرجى الرجوع إلى [توسيع أنواع الحقول].

#الدالة الإنشائية

عادةً لا يتم استدعاؤها مباشرةً من قبل المطورين، بل يتم استدعاؤها بشكل أساسي عبر الدالة db.collection({ fields: [] }) كمدخل وكيل.

عند توسيع حقل، يتم تنفيذ ذلك بشكل أساسي عن طريق وراثة الفئة المجردة Field ثم تسجيلها في مثيل Database.

التوقيع

  • constructor(options: FieldOptions, context: FieldContext)

المعلمات

المعلمةالنوعالقيمة الافتراضيةالوصف
optionsFieldOptions-كائن تهيئة الحقل
options.namestring-اسم الحقل
options.typestring-نوع الحقل، والذي يتوافق مع اسم نوع الحقل المسجل في قاعدة البيانات (db).
contextFieldContext-كائن سياق الحقل
context.databaseDatabase-مثيل قاعدة البيانات
context.collectionCollection-مثيل المجموعة

#أعضاء المثيل

#name

اسم الحقل.

#type

نوع الحقل.

#dataType

نوع تخزين الحقل في قاعدة البيانات.

#options

معلمات تهيئة الحقل.

#context

كائن سياق الحقل.

#دوال التهيئة

#on()

طريقة تعريف مختصرة تعتمد على أحداث المجموعة. تعادل db.on(this.collection.name + '.' + eventName, listener).

عادةً لا يكون من الضروري تجاوز هذه الدالة عند الوراثة.

التوقيع

  • on(eventName: string, listener: (...args: any[]) => void)

المعلمات

المعلمةالنوعالقيمة الافتراضيةالوصف
eventNamestring-اسم الحدث
listener(...args: any[]) => void-مستمع الحدث

#off()

طريقة إزالة مختصرة تعتمد على أحداث المجموعة. تعادل db.off(this.collection.name + '.' + eventName, listener).

عادةً لا يكون من الضروري تجاوز هذه الدالة عند الوراثة.

التوقيع

  • off(eventName: string, listener: (...args: any[]) => void)

المعلمات

المعلمةالنوعالقيمة الافتراضيةالوصف
eventNamestring-اسم الحدث
listener(...args: any[]) => void-مستمع الحدث

#bind()

المحتوى الذي يتم تنفيذه عند إضافة حقل إلى مجموعة. يُستخدم عادةً لإضافة مستمعي أحداث المجموعة ومعالجات أخرى.

عند الوراثة، يجب استدعاء الدالة super.bind() المقابلة أولاً.

التوقيع

  • bind()

#unbind()

المحتوى الذي يتم تنفيذه عند إزالة حقل من مجموعة. يُستخدم عادةً لإزالة مستمعي أحداث المجموعة ومعالجات أخرى.

عند الوراثة، يجب استدعاء الدالة super.unbind() المقابلة أولاً.

التوقيع

  • unbind()

#get()

يحصل على قيمة عنصر تهيئة الحقل.

التوقيع

  • get(key: string): any

المعلمات

المعلمةالنوعالقيمة الافتراضيةالوصف
keystring-اسم عنصر التهيئة

مثال

const field = db.collection('users').getField('name');

// يحصل على قيمة عنصر تهيئة اسم الحقل، ويعيد 'name'
console.log(field.get('name'));

#merge()

يدمج قيم عناصر تهيئة الحقل.

التوقيع

  • merge(options: { [key: string]: any }): void

المعلمات

المعلمةالنوعالقيمة الافتراضيةالوصف
options{ [key: string]: any }-كائن عناصر التهيئة المراد دمجها

مثال

const field = db.collection('users').getField('name');

field.merge({
  // إضافة تهيئة فهرس
  index: true,
});

#remove()

يزيل الحقل من المجموعة (من الذاكرة فقط).

مثال

const books = db.getCollections('books');

books.getField('isbn').remove();

// إزالة حقيقية من قاعدة البيانات
await books.sync();

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

#removeFromDb()

يزيل الحقل من قاعدة البيانات.

التوقيع

  • removeFromDb(options?: Transactionable): Promise<void>

المعلمات

المعلمةالنوعالقيمة الافتراضيةالوصف
options.transaction?Transaction-مثيل المعاملة

#existsInDb()

يحدد ما إذا كان الحقل موجودًا في قاعدة البيانات.

التوقيع

  • existsInDb(options?: Transactionable): Promise<boolean>

المعلمات

المعلمةالنوعالقيمة الافتراضيةالوصف
options.transaction?Transaction-مثيل المعاملة

#قائمة بأنواع الحقول المضمنة

تتضمن NocoBase بعض أنواع الحقول الشائعة الاستخدام، ويمكنك استخدام اسم النوع المقابل مباشرةً لتحديد النوع عند تعريف الحقول للمجموعة. تختلف تهيئة معلمات الحقول باختلاف أنواعها، يرجى الرجوع إلى القائمة أدناه للحصول على التفاصيل.

سيتم تمرير جميع عناصر تهيئة أنواع الحقول، باستثناء تلك المذكورة أدناه، إلى Sequelize. لذا، يمكن استخدام جميع عناصر تهيئة الحقول التي يدعمها Sequelize هنا (مثل allowNull، defaultValue، وما إلى ذلك).

بالإضافة إلى ذلك، تعالج أنواع الحقول من جانب الخادم بشكل أساسي مشكلات تخزين قاعدة البيانات وبعض الخوارزميات، وهي غير مرتبطة بشكل أساسي بأنواع عرض الحقول والمكونات المستخدمة في الواجهة الأمامية. لأنواع حقول الواجهة الأمامية، يرجى الرجوع إلى إرشادات البرنامج التعليمي ذات الصلة.

#'boolean'

نوع القيمة المنطقية.

مثال

db.collection({
  name: 'books',
  fields: [
    {
      type: 'boolean',
      name: 'published',
    },
  ],
});

#'integer'

نوع العدد الصحيح (32 بت).

مثال

db.collection({
  name: 'books',
  fields: [
    {
      type: 'integer',
      name: 'pages',
    },
  ],
});

#'bigInt'

نوع العدد الصحيح الكبير (64 بت).

مثال

db.collection({
  name: 'books',
  fields: [
    {
      type: 'bigInt',
      name: 'words',
    },
  ],
});

#'double'

نوع الفاصلة العائمة مزدوجة الدقة (64 بت).

مثال

db.collection({
  name: 'books',
  fields: [
    {
      type: 'double',
      name: 'price',
    },
  ],
});

#'real'

نوع الأعداد الحقيقية (ينطبق على PostgreSQL فقط).

#'decimal'

نوع الأعداد العشرية.

#'string'

نوع السلسلة النصية. يعادل نوع VARCHAR في معظم قواعد البيانات.

مثال

db.collection({
  name: 'books',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
});

#'text'

نوع النص. يعادل نوع TEXT في معظم قواعد البيانات.

مثال

db.collection({
  name: 'books',
  fields: [
    {
      type: 'text',
      name: 'content',
    },
  ],
});

#'password'

نوع كلمة المرور (امتداد NocoBase). يقوم بتشفير كلمات المرور بناءً على دالة scrypt من حزمة crypto الأصلية في Node.js.

مثال

db.collection({
  name: 'users',
  fields: [
    {
      type: 'password',
      name: 'password',
      length: 64, // الطول، الافتراضي 64
      randomBytesSize: 8, // طول البايتات العشوائية، الافتراضي 8
    },
  ],
});

المعلمات

المعلمةالنوعالقيمة الافتراضيةالوصف
lengthnumber64طول الأحرف
randomBytesSizenumber8حجم البايتات العشوائية

#'date'

نوع التاريخ.

#'time'

نوع الوقت.

#'array'

نوع المصفوفة (ينطبق على PostgreSQL فقط).

#'json'

نوع JSON.

#'jsonb'

نوع JSONB (ينطبق على PostgreSQL فقط، وسيتم التعامل مع الأنواع الأخرى كنوع 'json' للملاءمة).

#'uuid'

نوع UUID.

#'uid'

نوع UID (امتداد NocoBase). نوع معرف سلسلة نصية عشوائية قصيرة.

#'formula'

نوع الصيغة (امتداد NocoBase). يمكن تهيئته لإجراء حسابات صيغ رياضية بناءً على mathjs، حيث يمكن للصيغة الإشارة إلى قيم الأعمدة الأخرى في نفس السجل للمشاركة في الحساب.

مثال

db.collection({
  name: 'orders',
  fields: [
    {
      type: 'double',
      name: 'price',
    },
    {
      type: 'integer',
      name: 'quantity',
    },
    {
      type: 'formula',
      name: 'total',
      expression: 'price * quantity',
    },
  ],
});

#'radio'

نوع الاختيار الفردي (امتداد NocoBase). يمكن أن تحتوي المجموعة بأكملها على صف واحد كحد أقصى تكون قيمة هذا الحقل فيه true، بينما تكون جميع القيم الأخرى false أو null.

مثال

يوجد مستخدم واحد فقط في النظام بأكمله تم وضع علامة "root" عليه. بعد تغيير قيمة "root" لأي مستخدم آخر إلى true، سيتم تغيير جميع السجلات الأخرى التي كانت قيمة "root" فيها true إلى false:

db.collection({
  name: 'users',
  fields: [
    {
      type: 'radio',
      name: 'root',
    },
  ],
});

#'sort'

نوع الفرز (امتداد NocoBase). يقوم بالفرز بناءً على أرقام صحيحة، ويُنشئ تلقائيًا رقم تسلسليًا جديدًا للسجلات الجديدة، ويعيد ترتيب الأرقام التسلسلية عند نقل البيانات.

إذا قامت المجموعة بتعريف خيار sortable، فسيتم إنشاء حقل مقابل تلقائيًا أيضًا.

مثال

يمكن فرز المقالات بناءً على المستخدم الذي تنتمي إليه:

db.collection({
  name: 'posts',
  fields: [
    {
      type: 'belongsTo',
      name: 'user',
    },
    {
      type: 'sort',
      name: 'priority',
      scopeKey: 'userId', // فرز البيانات المجمعة حسب نفس قيمة userId
    },
  ],
});

#'virtual'

نوع افتراضي. لا يقوم بتخزين البيانات فعليًا، ويُستخدم فقط عند تعريف getter/setter خاص.

#'belongsTo'

نوع الارتباط من متعدد إلى واحد. يتم تخزين المفتاح الأجنبي في جدولها الخاص، على عكس hasOne/hasMany.

مثال

أي مقال ينتمي إلى مؤلف معين:

db.collection({
  name: 'posts',
  fields: [
    {
      type: 'belongsTo',
      name: 'author',
      target: 'users', // إذا لم يتم تهيئته، يكون الافتراضي هو اسم المجموعة بصيغة الجمع
      foreignKey: 'authorId', // إذا لم يتم تهيئته، يكون الافتراضي بتنسيق <name> + Id
      sourceKey: 'id', // إذا لم يتم تهيئته، يكون الافتراضي هو id للمجموعة الهدف
    },
  ],
});

#'hasOne'

نوع الارتباط من واحد إلى واحد. يتم تخزين المفتاح الأجنبي في المجموعة المرتبطة، على عكس belongsTo.

مثال

كل مستخدم لديه ملف شخصي واحد:

db.collection({
  name: 'users',
  fields: [
    {
      type: 'hasOne',
      name: 'profile',
      target: 'profiles', // يمكن حذفه
    },
  ],
});

#'hasMany'

نوع الارتباط من واحد إلى متعدد. يتم تخزين المفتاح الأجنبي في المجموعة المرتبطة، على عكس belongsTo.

مثال

يمكن لأي مستخدم أن يمتلك عدة مقالات:

db.collection({
  name: 'users',
  fields: [
    {
      type: 'hasMany',
      name: 'posts',
      foreignKey: 'authorId',
      sourceKey: 'id',
    },
  ],
});

#'belongsToMany'

نوع الارتباط من متعدد إلى متعدد. يستخدم مجموعة وسيطة لتخزين المفاتيح الأجنبية للطرفين. إذا لم يتم تحديد مجموعة موجودة كـ مجموعة وسيطة، فسيتم إنشاء مجموعة وسيطة تلقائيًا.

مثال

يمكن لأي مقال أن يحتوي على عدة وسوم، ويمكن لأي وسم أن يُضاف إلى عدة مقالات:

db.collection({
  name: 'posts',
  fields: [
    {
      type: 'belongsToMany',
      name: 'tags',
      target: 'tags', // يمكن حذفه إذا كان الاسم متطابقًا
      through: 'postsTags', // سيتم إنشاء المجموعة الوسيطة تلقائيًا إذا لم يتم تهيئتها
      foreignKey: 'postId', // المفتاح الأجنبي للمجموعة المصدر في المجموعة الوسيطة
      sourceKey: 'id', // المفتاح الأساسي للمجموعة المصدر
      otherKey: 'tagId', // المفتاح الأجنبي للمجموعة الهدف في المجموعة الوسيطة
    },
  ],
});

db.collection({
  name: 'tags',
  fields: [
    {
      type: 'belongsToMany',
      name: 'posts',
      through: 'postsTags', // نفس مجموعة العلاقات تشير إلى نفس المجموعة الوسيطة
    },
  ],
});