كيفية استخدام Sequelize مع Node.js و MySQL

تعرف على كيفية تثبيت وتهيئة Sequelize مع MySQL. استخدام Sequelize لإنشاء قواعد بيانات ونماذج ، بالإضافة إلى إجراء عمليات الإدراج والاختيار والحذف والمزيد 

Sequelize هو مخطط علاقات كائنات يستند إلى Node.js يجعل من السهل العمل مع قواعد بيانات MySQL و MariaDB و SQLite و PostgreSQL والمزيد. ينفذ مخطط علاقة الكائن وظائف مثل معالجة سجلات قاعدة البيانات من خلال تمثيل البيانات ككائنات. يحتوي Sequelize على آلية ترحيل قوية يمكنها تحويل مخططات قاعدة البيانات الحالية إلى إصدارات جديدة. بشكل عام ، يوفر Sequelize دعمًا ممتازًا لمزامنة قاعدة البيانات ، والتحميل الجاد ، والجمعيات ، والمعاملات ، وترحيل قواعد البيانات مع تقليل وقت التطوير ومنع حقن SQL.

في هذا البرنامج التعليمي ، ستقوم بتثبيت وتهيئة Sequelize مع MySQL في بيئة التطوير المحلية الخاصة بك. بعد ذلك ، ستستخدم Sequelize لإنشاء قواعد بيانات ونماذج ، بالإضافة إلى إجراء عمليات insertو selectو delete. بعد ذلك ، ستقوم بإنشاء ارتباطات Sequelize للعلاقات واحد لواحد ، واحد لكثير ، وعديد إلى متعدد . أخيرًا ، ستقوم بإنشاء استعلامات خام Sequelize لاستبدال المصفوفات والكائنات .

تم اختبار هذا البرنامج التعليمي على الإصدار 14.17.6 من Node.js والإصدار npm6.14.15 على نظام التشغيل macOS Catalina.

الخطوة 1 - تثبيت وتكوين التسلسل

في هذه الخطوة ، ستقوم بتثبيت Sequelize وإنشاء الاتصال بقاعدة بيانات MySQL. للقيام بذلك ، ستقوم أولاً بإنشاء تطبيق Node.js. بعد ذلك ، ستقوم بتثبيت Sequelize ، وتهيئة قاعدة بيانات MySQL ، وتطوير تطبيق بسيط.

تثبيت Sequelize

ابدأ بإنشاء مجلد المشروع. في هذا المثال ، يمكنك استخدام hello-world. بمجرد إنشاء المجلد ، انتقل إلى المجلد باستخدام الجهاز الطرفي:

mkdir hello-world
cd hello-world

بعد ذلك ، أنشئ نموذجًا لتطبيق Node.js باستخدام الأمر التالي:

npm init

بعد ذلك ، سيُطلب منك الإجابة عن بعض أسئلة الإعداد. استخدم الإخراج التالي للتكوين الخاص بك. اضغط ENTERلاستخدام القيمة الافتراضية المعروضة وتأكد من تعيين نقطة الدخول الرئيسية على أنها server.js. يؤدي هذا إلى إنشاء هيكل مشروع يسهل صيانته.

سيبدو الإخراج على النحو التالي ، والذي سوف يملأ package.jsonالملف:

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

بعد ذلك ، قم بإنشاء ملف فارغ server.jsداخل مجلد المشروع:

touch server.js

بعد اتباع الخطوات السابقة ، سيبدو هيكل المجلد النهائي كما يلي:

hello-world/
├─ package.json
├─ server.js

يمكنك الآن تثبيت Sequelize باستخدام الأمر التالي:

npm i sequelize@6.11.0

ملاحظة: يقوم هذا الأمر بتثبيت الإصدار 6.11.0. إذا كنت بحاجة إلى تثبيت أحدث إصدار ، فقم بتشغيل npm i sequelize.

بعد هذه التحديثات ، package.jsonيبدو الملف الآن كما يلي:

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "sequelize": "^6.11.0"
  }
}

في dependenciesالقسم ، سترى الآن تبعية تكميلية.

لقد قمت بإعداد المشروع وتثبيت Sequelize. بعد ذلك ، ستنشئ نموذج قاعدة بيانات للاتصال بها.

إنشاء نموذج قاعدة بيانات

كجزء من المتطلبات الأساسية ، قمت بتثبيت MySQL وضبطها ، والتي تضمنت إنشاء مستخدم. الآن سوف تقوم بإنشاء قاعدة بيانات فارغة.

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

mysql -u your_username -p

-uهو اسم المستخدم -pويتم تمرير الخيار إذا تم تأمين الحساب بكلمة مرور.

سيطلب خادم MySQL كلمة مرور قاعدة البيانات الخاصة بك. اكتب كلمة المرور الخاصة بك واضغط ENTER.

بمجرد تسجيل الدخول ، قم بإنشاء قاعدة بيانات تسمى hello_world_dbباستخدام الأمر التالي:

CREATE DATABASE hello_world_db;

للتحقق مما إذا كنت قد أنشأت قاعدة البيانات بنجاح ، يمكنك استخدام هذا الأمر:

SHOW DATABASES;

سيكون الإخراج الخاص بك مشابهًا لهذا:

+--------------------+
|      Database      |
+--------------------+
| hello_world_db     |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

بعد إنشاء نموذج قاعدة البيانات ، قطع الاتصال بخادم MySQL:

mysql> QUIT

الآن ، تحتاج إلى تثبيت برنامج تشغيل يدوي لقاعدة البيانات التي تختارها. نظرًا لأن Sequelize يوفر ميزات ORM فقط ، فإنه لا يتضمن برامج تشغيل قواعد البيانات المضمنة. لذلك ، ستحتاج إلى تثبيت برامج التشغيل وفقًا لتفضيلاتك. للقيام بذلك ، انتقل إلى دليل المشروع باستخدام المحطة الطرفية وقم بتثبيت برنامج تشغيل MySQL للمشروع باستخدام الأمر التالي:

npm install --save mysql2

في هذه الحالة ، أنت تستخدم برنامج التشغيل لـ MySQL.

ملاحظة: نظرًا لأن هذا البرنامج التعليمي يستخدم MySQL كقاعدة بيانات ، فأنت تستخدم برنامج تشغيل لذلك. اعتمادًا على قاعدة البيانات الخاصة بك ، يمكنك تثبيت برنامج التشغيل يدويًا مثل:

  • npm install --save pg pg-hstore # Postgres
  • npm install --save mysql2
  • npm install --save mariadb
  • npm install --save sqlite3
  • npm install --save tedious # Microsoft SQL Server

الآن بعد أن أصبح لديك نموذج قاعدة بيانات ، يمكنك إنشاء أول تطبيق Sequelize باستخدام اتصال قاعدة البيانات.

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

في هذا القسم ، ستقوم بتوصيل تطبيق Node.js بقاعدة بيانات MySQL باستخدام Sequelize.

للاتصال بقاعدة البيانات ، افتح server.jsللتحرير باستخدام nanoأو محرر الكود المفضل لديك:

nano server.js

هنا ، ستقوم بإنشاء اتصال قاعدة بيانات في التطبيق الخاص بك باستخدام مثيل Sequelize. في هذه new Sequelize()الطريقة ، قم بتمرير معلمات خادم MySQL وبيانات اعتماد قاعدة البيانات على النحو التالي ، واستبدالها DATABASE_USERNAMEببيانات DATABASE_PASSWORDاعتماد مستخدم MySQL الخاص بك:

const Sequelize = require("sequelize");
const sequelize = new Sequelize(
 'hello_world_db',
 'DATABASE_USERNAME',
 'DATABASE_PASSWORD',
  {
    host: 'DATABASE_HOST',
    dialect: 'mysql'
  }
);

hostهو المكان الذي يتم فيه استضافة خادم MySQL ، لذلك ستحتاج إلى توفير عنوان URL للخادم أو عنوان IP. إذا كنت تستخدم خادم MySQL مثبتًا محليًا ، فيمكنك استبداله DATABASE_HOSTبالقيمة localhostأو 127.0.0.1كقيمة.

وبالمثل ، إذا كنت تستخدم خادمًا بعيدًا ، فتأكد من استبدال قيم اتصال قاعدة البيانات وفقًا لتفاصيل الخادم البعيد المناسبة.

ملاحظة: إذا كنت تستخدم أي برنامج خادم قاعدة بيانات آخر ، فيمكنك استبدال معلمة اللهجة وفقًا لذلك. اللهجة: 'mysql'، 'mariadb'، 'postgres'، 'mssql'.

بعد ذلك ، قم باستدعاء طريقة قائمة على الوعد authenticate() لإنشاء اتصال قاعدة بيانات بالتطبيق. للقيام بذلك ، أضف كتلة التعليمات البرمجية التالية إلى ملفك server.js:

...

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

يتم authenticate()استخدام الطريقة للاتصال بقاعدة البيانات واختبار ما إذا كانت بيانات الاعتماد المقدمة صحيحة أم لا. هنا ، يتم فتح اتصال قاعدة البيانات افتراضيًا ويمكن استخدام نفس الاتصال لجميع الاستعلامات. كلما احتجت إلى إغلاق الاتصال ، اتصل sequelize.close()بالطريقة بعد هذه authenticate()المكالمة. لمعرفة المزيد حول Sequelize ، يرجى الاطلاع على دليل البدء .

معظم الطرق التي يوفرها Sequelize غير متزامنة. هذا يعني أنه يمكنك تشغيل العمليات في التطبيق الخاص بك بينما تكون كتلة التعليمات البرمجية غير المتزامنة في وقت التنفيذ. أيضًا ، بعد تنفيذ كتلة التعليمات البرمجية غير المتزامن الناجح ، فإنه يُرجع وعدًا ، وهو القيمة التي يتم إرجاعها في نهاية العملية. لذلك ، في كتل التعليمات البرمجية غير المتزامنة ، يمكنك استخدام then()، catch()وإرجاع finally()البيانات التي تمت معالجتها.

في هذه المرحلة ، server.jsسيبدو الملف كما يلي:

const Sequelize = require("sequelize");

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

احفظ وأغلق ملفك.

في دليل المشروع ، قم بتشغيل server.jsالتطبيق عن طريق تشغيل الأمر التالي:

node server.js

سيبدو الإخراج الخاص بك كما يلي:

Output
Connection has been established successfully!

لقد قمت بإنشاء اتصال قاعدة البيانات بنجاح.

في هذه الخطوة ، قمت بتثبيت Sequelize ، وإنشاء نموذج قاعدة بيانات ، واستخدام Sequelize للاتصال بقاعدة البيانات. بعد ذلك ، ستعمل مع النماذج في Sequelize.

الخطوة 2 - إنشاء جدول قاعدة بيانات باستخدام Sequelize

الآن بعد أن أنشأت نموذج قاعدة بيانات MySQL ، يمكنك استخدام Sequelize لإنشاء جدول وتعبئته بالبيانات. في Sequelize ، يشار إلى جداول قاعدة البيانات كنماذج . النموذج هو تجريد يمثل جدول قاعدة البيانات. تعرّف النماذج عدة أشياء للتسلسل ، مثل اسم الجدول وتفاصيل العمود وأنواع البيانات. في هذه الخطوة ، ستقوم بإنشاء نموذج Sequelize لبيانات الكتاب.

للبدء ، قم بإنشاء ملف جديد يسمى book.model.jsفي دليل المشروع:

nano book.model.js

على غرار الخطوة السابقة ، أضف رمز Sequelize لبدء قاعدة البيانات مع استيراد جديد DataTypesلأعلى الملف:

const { Sequelize, DataTypes } = require("sequelize");

يحتوي Sequelize على العديد من أنواع البيانات المضمنة. للوصول إلى أنواع البيانات هذه ، يمكنك إضافة استيراد لـ DataTypes. يشير هذا البرنامج التعليمي إلى بعض أنواع البيانات المستخدمة بشكل متكرر ، مثل STRINGو INTEGERو و DATEONLY. لمعرفة المزيد حول أنواع البيانات المدعومة الأخرى ، يمكنك الرجوع إلى وثائق Sequelize الرسمية .

بعد ذلك ، قم بتضمين الأسطر التي استخدمتها سابقًا لإنشاء اتصال بقاعدة بيانات MySQL ، وتحديث بيانات اعتماد MySQL وفقًا لذلك:

...

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

بعد ذلك ، ستقوم بإنشاء نموذج يسمى books، والذي يتضمن title، authorو release_date، و subjectID. للقيام بذلك ، استخدم sequelize.define()الطريقة كما هو موضح:

...

const Book = sequelize.define("books", {
   title: {
     type: DataTypes.STRING,
     allowNull: false
   },
   author: {
     type: DataTypes.STRING,
     allowNull: false
   },
   release_date: {
     type: DataTypes.DATEONLY,
   },
   subject: {
     type: DataTypes.INTEGER,
   }
});

تحدد الطريقة sequelize.define()نموذجًا جديدًا يمثل جدولًا في قاعدة البيانات. تقوم كتلة التعليمات البرمجية هذه بإنشاء جدول يسمى booksوتخزين سجلات الكتاب وفقًا لـ title، authorو release_date، و subject.

في هذا الرمز ، allowNullيوضح أن قيمة عمود النموذج لا يمكن أن تكون null. وبالمثل ، إذا كنت بحاجة إلى تعيين مثل هذه القيمة ، فيمكنك استخدامها defaultValue: "value".

بعد ذلك ، ستضيف bookالنموذج إلى قاعدة البيانات الخاصة بك. للقيام بذلك ، ستستخدم sync()الطريقة على النحو التالي:

...

sequelize.sync().then(() => {
   console.log('Book table created successfully!');
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

في sync()الطريقة ، أنت تطلب من Sequelize القيام ببعض الأشياء لقاعدة البيانات. مع هذه المكالمة ، سيجري Sequelize تلقائيًا استعلام SQL إلى قاعدة البيانات وإنشاء جدول ، وطباعة الرسالة Book table created successfully!.

كما ذكرنا سابقًا ، تعد طريقة sync () طريقة قائمة على الوعد ، مما يعني أنه يمكنها أيضًا معالجة الأخطاء. في مقطع التعليمات البرمجية هذا ، ستتحقق مما إذا كان الجدول قد تم إنشاؤه بنجاح. إذا لم يكن كذلك ، فسيعيد خطأ عبر طريقة catch ويطبعه على الإخراج.

ملاحظة: يمكنك إدارة مزامنة النموذج عن طريق تمرير forceالمعلمات لفرض إنشاء جدول جديد إذا لم يكن موجودًا ، أو استخدام جدول موجود. فيما يلي بعض الأمثلة التي قد تكون مفيدة لك أثناء العمل مع Sequelize:

  • model.sync(): يؤدي هذا إلى إنشاء الجدول إذا لم يكن موجودًا بالفعل.
  • model.sync({ force: true }): يؤدي هذا إلى إنشاء الجدول عن طريق إفلاته إذا كان نفس الجدول موجودًا بالفعل.

سيبدو الرمز النهائي كما يلي:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Book = sequelize.define("books", {
   title: {
     type: DataTypes.STRING,
     allowNull: false
   },
   author: {
     type: DataTypes.STRING,
     allowNull: false
   },
   release_date: {
     type: DataTypes.DATEONLY,
   },
   subject: {
     type: DataTypes.INTEGER,
   }
});

sequelize.sync().then(() => {
   console.log('Book table created successfully!');
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

احفظ وأغلق ملفك.

قم بتشغيل التطبيق الخاص بك باستخدام الأمر التالي:

node book.model.js

سوف تحصل على الإخراج التالي في سطر الأوامر الخاص بك:

Output
Executing (default): SELECT 1+1 AS result
Executing (default): CREATE TABLE IF NOT EXISTS `books` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255) NOT NULL, `author` VARCHAR(255) NOT NULL, `release_date` DATE, `subject` INTEGER, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Connection has been established successfully.
Executing (default): SHOW INDEX FROM `books`
Book table created successfully!

في الإخراج ، سترى سجل الإرجاع يحتوي على الرسالة ، Book table created successfully!. يمكنك التحقق من ذلك عن طريق التحقق من قاعدة البيانات الخاصة بك لرؤية booksالجدول الجديد الذي تم إنشاؤه في hello_world_dbقاعدة البيانات.

للتحقق من إنشاء الجدول الجديد ، قم بتسجيل الدخول إلى مثيل MySQL الخاص بك:

mysql -u YOUR_USERNAME -p

بعد إدخال كلمة المرور الخاصة بك ، قم بالتغيير إلى نموذج قاعدة البيانات:

USE hello_world_db;

ثم قم بتشغيل الأمر لإظهار الجداول:

SHOW TABLES;

سيكون الإخراج الخاص بك مشابهًا لهذا:

+---------------------------+
| Tables_in_hello_world_db |
+---------------------------+
| books                     |
+---------------------------+
1 row in set (0.00 sec)

أخيرًا ، افصل الاتصال بخادم MySQL:

mysql> QUIT

لقد تحققت من bookنجاح إنشاء النموذج. باستخدام هذه العملية ، يمكنك إنشاء أي عدد من النماذج باتباع نفس الإجراء.

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

الخطوة 3 - استخدام Sequelize لاستعلامات قاعدة البيانات

في هذه الخطوة ، ستستخدم استعلامات Sequelize المضمنة للإدراج والتحديد والاختيار مع الجمل الشرطية والحذف.

إدراج سجل جديد

في الخطوة السابقة ، قمت بإنشاء bookنموذج داخل قاعدة البيانات. في هذا القسم ، ستقوم بإدراج البيانات في هذا النموذج.

للبدء ، انسخ محتويات book.model.jsمن الخطوة السابقة. قم بإنشاء ملف جديد يسمى book.controller.jsللتعامل مع منطق الاستعلام. أضف الرمز من book.model.jsإلى book.controller.js.

في book.controller.js، حدد sync()الطريقة. في sync()الطريقة ، أضف الأسطر المميزة التالية:

...

sequelize.sync().then(() => {
   console.log('Book table created successfully!');

   Book.create({
       title: "Clean Code",
       author: "Robert Cecil Martin",
       release_date: "2021-12-14",
       subject: 3
   }).then(res => {
       console.log(res)
   }).catch((error) => {
       console.error('Failed to create a new record : ', error);
   });

}).catch((error) => {
   console.error('Unable to create table : ', error);
});

هنا ، تقوم بإدراج سجل كتاب جديد في booksالنموذج الذي قمت بإنشائه بالفعل باستخدام sync()الطريقة ، والتي تدعم إضافة سجلات جديدة إلى النماذج التي تم إنشاؤها مسبقًا. بمجرد تنفيذ طريقة sync () بنجاح ، فإنها تقوم بتشغيل then()الطريقة. داخل then()الطريقة ، يمكنك استدعاء create()طريقة لإدراج السجلات الجديدة في النموذج.

يمكنك استخدام create()الطريقة لتمرير البيانات التي تريد إضافتها إلى قاعدة البيانات ككائن. سيقوم القسم المميز من التعليمات البرمجية بإدراج إدخال جديد إلى جدولك الحالي books. في هذا المثال ، تضيف Clean Codeبواسطة Robert Cecil Martin، والتي تم تصنيفها subjectبمعرف 3. يمكنك استخدام نفس الرمز ، مع تحديثه بمعلومات كتب أخرى ، لإضافة سجلات جديدة إلى قاعدة البيانات الخاصة بك.

أحفظ وأغلق الملف.

قم بتشغيل التطبيق باستخدام الأمر التالي:

node book.controller.js

سيبدو الإخراج الخاص بك مشابهًا لما يلي:

Output
books {
  dataValues:
   { id: 1,
     title: 'Clean Code',
     author: 'Robert Cecil Martin',
     release_date: '2021-12-14',
     subject: 3,
     updatedAt: 2021-12-14T10:12:16.644Z,
   ...
}

لقد قمت بإدراج سجل جديد في النموذج الذي قمت بإنشائه في قاعدة البيانات. يمكنك الاستمرار في إضافة سجلات متعددة باستخدام نفس العملية.

اختيار كافة السجلات

في هذا القسم ، ستختار وتحصل على جميع سجلات الكتاب من قاعدة البيانات باستخدام findAll()الطريقة. للقيام بذلك ، قم أولاً بفتح الطريقة book.controller.jsالسابقة وإزالتها Book.create(). في sync()الطريقة ، أضف Book.findAll()الطريقة كما هو موضح:

...

sequelize.sync().then(() => {

    Book.findAll().then(res => {
        console.log(res)
    }).catch((error) => {
        console.error('Failed to retrieve data : ', error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

...

أحفظ وأغلق الملف.

بعد ذلك ، قم بتشغيل التطبيق مرة أخرى باستخدام الأمر التالي:

node book.controller.js

سيبدو الإخراج الخاص بك مشابهًا لما يلي:

Output
[
  books {
    dataValues: {
      id: 1,
      title: 'Clean Code',
      author: 'Robert Cecil Martin',
      release_date: '2020-01-01',
      subject: 3,
      createdAt: 2021-02-22T09:13:55.000Z,
      updatedAt: 2021-02-22T09:13:55.000Z
    },
    _previousDataValues: {
      id: 1,
      title: 'Clean Code',
      author: 'Robert Cecil Martin',
      release_date: '2020-01-01',
      subject: 3,
      createdAt: 2021-02-22T09:13:55.000Z,
      updatedAt: 2021-02-22T09:13:55.000Z
    },
...
]

يحتوي الإخراج على جميع بيانات الكتاب ككائن مصفوفة. لقد استخدمت بنجاح findAll()طريقة Sequelize لإرجاع جميع بيانات الكتاب من قاعدة البيانات.

الاختيار مع whereالفقرة

في هذا القسم ، ستحدد القيم بشروط باستخدام whereالجملة. يتم whereاستخدام الجملة لتحديد شرط أثناء جلب البيانات. في هذا البرنامج التعليمي ، ستحصل على كتاب بمعرف سجل محدد من قاعدة البيانات باستخدام findOne()الطريقة.

للقيام بذلك ، افتح book.controller.jsللتحرير ، واحذف findAll()الطريقة ، وأضف الأسطر التالية:

...

sequelize.sync().then(() => {

    Book.findOne({
        where: {
            id : "1"
        }
    }).then(res => {
        console.log(res)
    }).catch((error) => {
        console.error('Failed to retrieve data : ', error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

هنا ، يمكنك تحديد سجل كتاب معين من قاعدة البيانات باستخدام findOne()الطريقة مع whereالخيار. في هذا المثال ، تقوم باسترداد بيانات الكتاب التي idتساوي 1.

أحفظ وأغلق الملف.

بعد ذلك ، قم بتشغيل التطبيق:

node book.controller.js

سيبدو الإخراج الخاص بك مشابهًا لما يلي:

Output
books {
  dataValues: {
    id: 1,
    title: 'Clean Code',
    author: 'Robert Cecil Martin',
    release_date: '2020-01-01',
    subject: 'Science',
    createdAt: 2021-02-22T09:13:55.000Z,
    updatedAt: 2021-02-22T09:13:55.000Z
  },
  ...
}

لقد استخدمت بنجاح whereالعبارات للحصول على بيانات من نماذج Sequelize. يمكنك استخدام whereالجملة في تطبيق قاعدة البيانات لالتقاط البيانات الشرطية.

حذف سجل

لحذف سجل معين من نموذج قاعدة البيانات ، يمكنك استخدام destroy()الطريقة مع whereالخيار. للقيام بذلك ، افتح الطريقة book.controller.jsوأزلها findOne()وأضف الأسطر المميزة التالية:

...
sequelize.sync().then(() => {

  Book.destroy({
      where: {
        id: 2
      }
  }).then(() => {
      console.log("Successfully deleted record.")
  }).catch((error) => {
      console.error('Failed to delete record : ', error);
  });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

هنا ، تقوم بإزالة سجل كتاب من قاعدة البيانات باستخدام destroy()الطريقة مع whereالخيار وتمرير idالكتاب للإزالة. ستقوم بإزالة سجل الكتاب الذي idيساوي 2.

أحفظ وأغلق الملف.

بعد ذلك ، قم بتشغيل التطبيق:

node book.controller.js

سيبدو مخرجاتك كما يلي:

Output
Successfully deleted record.

تم حذف السجل.

في هذه الخطوة ، قمت بتجربة نموذج قاعدة البيانات والاستعلام عن النموذج. لقد بدأت قاعدة البيانات ، وأنشأت النماذج ، وأدرجت السجلات ، واسترجعت السجلات ، واسترجعت السجلات بشروط باستخدام whereالفقرة ، وحذفت السجلات المحددة. مع هذه المعرفة بـ Sequelize ، ستنشئ الآن جمعيات في Sequelize. بعد ذلك ، ستتمكن من تحديد مجموعة متنوعة من العلاقات والعمل معها باستخدام نماذج Sequelize.

الخطوة 4 - إنشاء الجمعيات باستخدام Sequelize

في هذه الخطوة ، ستستخدم أنواع الارتباطات القياسية التي يدعمها Sequelize: اقترانات واحد لواحد ، وواحد بأطراف ، وأطراف بأطراف . ستستخدم بيانات نموذجية حول الطلاب والدورات التدريبية ومستويات الصفوف.

يستخدم Sequelize أنواع الاقتران بناءً على علاقات قاعدة البيانات التالية:

علاقة رأس برأس: تعني علاقة رأس برأس أن سجلًا في أحد الجداول مقترن بسجل واحد بالضبط في جدول آخر. فيما يتعلق بـ Sequelize ، يمكنك استخدامbelongsTo()والجمعياتhasOne()لإنشاء هذا النوع من العلاقات.

علاقة رأس بأطراف: تعني علاقة رأس بأطراف أن سجل في جدول واحد مقترن بسجلات متعددة في جدول آخر. باستخدام Sequelize ، يمكنك استخدامhasMany()طرق اقترانات لإنشاء هذا النوع من العلاقات.

علاقة أطراف بأطراف: تعني علاقة أطراف بأطراف أن سجلات متعددة في جدول واحد مرتبطة بسجلات متعددة في جدول آخر. باستخدام Sequelize ، يمكنك استخدامbelongsToMany()الجمعيات لإنشاء هذا النوع من العلاقات.

قبل إنشاء هذه الاقترانات ، ستقوم أولاً بإنشاء قاعدة بيانات جديدة تسمى student_dbوإضافة نماذج جديدة وبعض البيانات النموذجية للطلاب والدورات التدريبية ومستوى الصف الدراسي.

لإنشاء قاعدة البيانات ، اتبع نفس العملية في الخطوة 1 - تثبيت وتكوين Sequelize لتسجيل الدخول إلى MySQL وإنشاء قاعدة بيانات تسمى student_db. بمجرد إنشاء قاعدة البيانات الجديدة ، قم بتسجيل الخروج من MySQL. بعد ذلك ، ستبدأ في إنشاء اقترانات قاعدة البيانات.

إنشاء علاقة واحد لواحد معbelongsTo()

في هذا القسم ، ستقوم بإنشاء علاقة رأس برأس باستخدام نماذج Sequelize. تخيل أنك تريد الحصول على تفاصيل طالب واحد جنبًا إلى جنب مع مستوى صفه. نظرًا لأن طالبًا واحدًا يمكنه الحصول على مستوى صف واحد فقط ، فإن هذا النوع من الارتباط هو علاقة رأس برأس ويمكنك استخدام belongsTo()الطريقة.

ملاحظة: هناك فرق بين belongsTo()و hasOne(). belongsTo()ستضيف foreignKeyالجدول المصدر ، بينما hasOne()ستضيفه إلى الجدول الهدف. في أي حال ، إذا تم استخدام كلتا العلاقات في نفس الوقت ، فستعمل كعلاقات ثنائية الاتجاه ثنائية الاتجاه.

تسمح belongsTo()لك الطريقة بإنشاء علاقة رأس برأس بين نموذجين Sequelize. في هذا المثال ، أنت تستخدم نماذج Studentو .Grade

قم بإنشاء ملف جديد يسمى one_to_one.js. كما فعلت في القسم السابق ، الاتصال بقاعدة بيانات MySQL ، قم بتضمين الأسطر لإنشاء اتصال بقاعدة البيانات ومصادقة مستخدم MySQL الخاص بك في أعلى الملف. تأكد من تحديث بيانات اعتماد MySQL حسب الحاجة:

const { Sequelize, DataTypes } = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

في هذا القسم ، ستقوم بإنشاء ثلاثة نماذج في student_dbقاعدة البيانات الجديدة: Studentو Gradeو و Course. ستبدأ بإنشاء نماذج Studentو . Gradeلاحقًا في هذه الخطوة ، ستقوم بإنشاء Coursesالنموذج.

بالنسبة Studentللنموذج ، أضف كتلة التعليمات البرمجية التالية إلى one_to_one.js:

...
const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});

يحتوي نموذج الطالب هذا على عمودين: student_idو name.

بعد ذلك ، أضف كتلة التعليمات البرمجية Gradeللنموذج:

...
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

النموذج يحتوي Gradeعلى العمود grade.

لإثبات الارتباطات ، ستحتاج إلى إضافة بيانات نموذجية إلى قاعدة البيانات. لذلك ، ستستخدم bulk()الطريقة. بدلاً من إدراج البيانات في الصفوف واحدًا تلو الآخر ، bulkCreate()تسمح لك الطريقة بإدراج صفوف متعددة في نماذج قاعدة البيانات في وقت واحد.

حتى الآن ، قم باستيراد Gradeو Studentالبيانات إلى النماذج الخاصة بهم في قاعدة البيانات كما هو موضح:

...
const grade_data = [{grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           …
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

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

في one-to-one.js، أضف السطر التالي أسفل student_dataالكتلة:

...
Student.belongsTo(Grade);

بعد ذلك ، ستحتاج إلى التحقق مما إذا كان الارتباط يعمل بشكل صحيح. للقيام بذلك ، يمكنك استرداد جميع بيانات الطلاب بمستويات الصف المرتبطة عن طريق تمرير includeالمعلمة داخل findAll()الطريقة.

نظرًا لأنك بحاجة إلى الحصول على مستوى الطالب ، فسوف تنجح Gradeفي ذلك كنموذج. في sequelize.sync()الطريقة ، أضف الخطوط المميزة كما هو موضح:

...
sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Student.findAll({
               include: [{
                   model: Grade
               }]
           }).then(result => {
               console.log(result)
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

الكود الكامل يبدو كما يلي:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );
sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});

const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [{grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

// One-To-One association
Student.belongsTo(Grade);

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Student.findAll({
               include: [{
                   model: Grade
               }]
           }).then(result => {
               console.log(result)
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

احفظ وأغلق ملفك.

قم بتشغيل الملف باستخدام الأمر التالي:

node one_to_one.js

ستكون المخرجات طويلة ، وسترى بيانات جميع الطلاب بمستويات الصف. فيما يلي مقتطف من الإخراج يوضح بيانات الطالب:

Output
students {
    dataValues:
   { student_id: '3e786a8f-7f27-4c59-8e9c-a8c606892288',
       name: 'Sam Lewis',
       createdAt: 2021-12-16T08:49:38.000Z,
       updatedAt: 2021-12-16T08:49:38.000Z,
       gradeId: 1,
       grade: [grades] },
    _previousDataValues:
...

اعتمادًا على أدوات سطر الأوامر التي تستخدمها ، قد تتم طباعة الإخراج كعرض موسع أم لا. إذا كانت طريقة عرض موسعة ، فإنها تطبع gradeالكائن الموسع كإخراج.

في هذا القسم ، قمت بإنشاء علاقة رأس برأس باستخدام Student.belongsTo(Grade);استدعاء الأسلوب وحصلت على التفاصيل وفقًا للاقتران الذي أنشأته.

إنشاء علاقة رأس بأطراف معhasMany()

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

للبدء ، انسخ محتويات one_to_one.jsملف جديد يسمى one_to_many.js. في one_to_many.js، قم بإزالة الخطوط بعد student_dataالكتلة. one_to_many.jsسيبدو ملفك كالتالي:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [ {grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

بعد student_dataالكتلة ، استخدم hasMany()الطريقة لإنشاء علاقة جديدة:

...
Grade.hasMany(Student)

تسمح hasMany()لك الطريقة بإنشاء علاقة رأس بأطراف بين نموذجين Sequelize. هنا ، أنت تستخدم نماذج Gradeو .Student

بعد ذلك ، أضف sequelize.sync()الطريقة findAll()بالطريقة الموجودة أسفل hasMany()السطر:

...
sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Grade.findAll({
               where: {
                   grade: 9
               },
               include: [{
                   model: Student
               }]
           }).then(result => {
               console.dir(result, { depth: 5 });
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

هنا تحاول الوصول إلى جميع الطلاب في مستوى صف معين - في هذه الحالة ، جميع الطلاب في الصف 9. لقد أضفت أيضًا Studentالنموذج في includeالخيار.

ها هو الكود الكامل:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [ {grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

// One-To-Many relationship
Grade.hasMany(Student);

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Grade.findAll({
               where: {
                   grade: 9
               },
               include: [{
                   model: Student
               }]
           }).then(result => {
               console.dir(result, { depth: 5 });
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

احفظ وأغلق ملفك.

قم بتشغيل الملف بالأمر التالي:

node one_to_many.js

سيبدو الإخراج مشابهًا لما يلي. ستكون طويلة جدًا ، ولكن 9سيتم إرجاع جميع الطلاب في الصف على النحو التالي:

Output
[ grades {
    dataValues:
     { id: 1,
       grade: 9,
       createdAt: 2021-12-20T05:12:31.000Z,
       updatedAt: 2021-12-20T05:12:31.000Z,
       students:
        [ students {
            dataValues:
             { student_id: '8a648756-4e22-4bc0-8227-f590335f9965',
               name: 'Sam Lewis',
               createdAt: 2021-12-20T05:12:31.000Z,
               updatedAt: 2021-12-20T05:12:31.000Z,
               gradeId: 1 },
...
          students {
            dataValues:
             { student_id: 'f0304585-91e5-4efc-bdca-501b3dc77ee5',
               name: 'Max Butler',
               createdAt: 2021-12-20T05:12:31.000Z,
               updatedAt: 2021-12-20T05:12:31.000Z,
               gradeId: 1 },
...

في هذا القسم ، قمت بإنشاء علاقة رأس بأطراف باستخدام Grade.hasMany(Student);استدعاء الأسلوب. في الإخراج ، قمت باسترداد التفاصيل وفقًا للاقتران الذي قمت بإنشائه.

إنشاء علاقات كثير إلى كثير معbelongsToMany()

في هذا القسم ، ستنشئ علاقات كثير إلى كثير باستخدام نماذج Sequelize. كمثال ، تخيل موقفًا حيث يتم تسجيل الطلاب في الدورات. يمكن لطالب واحد التسجيل في العديد من الدورات ويمكن أن تضم دورة واحدة العديد من الطلاب. هذه علاقة أطراف بأطراف. لتنفيذ ذلك باستخدام Sequelize ، ستستخدم النماذج Student، Courseومع StudentCourseالطريقة belongsToMany().

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

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
);

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

بعد ذلك ، ستنشئ نماذج قاعدة البيانات لعلاقات كثير إلى كثير: Studentو Course. ثم ستضيف بعض عينات البيانات إلى تلك النماذج.

...

const Student = sequelize.define("students", {
    student_id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const Course = sequelize.define("courses", {
    course_name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const StudentCourse = sequelize.define('StudentCourse', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
      allowNull: false
    }
  });

const course_data = [
    {course_name : "Science"},
    {course_name : "Maths"},
    {course_name : "History"}
]

const student_data = [
    {name : "John Baker", courseId: 2},
    {name : "Max Butler", courseId: 1},
    {name : "Ryan Fisher", courseId: 3},
    {name : "Robert Gray", courseId: 2},
    {name : "Sam Lewis", courseId: 1}
]

const student_course_data = [
    {studentId : 1, courseId: 1},
    {studentId : 2, courseId: 1},
    {studentId : 2, courseId: 3},
    {studentId : 3, courseId: 2},
    {studentId : 1, courseId: 2},
]

هنا ، يمكنك إنشاء نماذج Studentو Courseوتقديم بعض عينات البيانات. يمكنك أيضًا تعيين a courseID، والذي ستستخدمه لاسترداد الطلاب وفقًا لنوع العلاقة هذا.

أخيرًا ، قمت بتعريف نموذج جديد يسمى StudentCourse، والذي يدير بيانات العلاقة بين Studentو Course. في هذا المثال ، studentId 1تم تسجيله في courseId 1و courseId 2.

لقد أكملت بدء قاعدة البيانات وأضفت بيانات نموذجية إلى قاعدة البيانات. بعد ذلك ، قم بإنشاء علاقات أطراف بأطراف باستخدام belongsToMany()الطريقة كما هو موضح:

...
Course.belongsToMany(Student, { through: 'StudentCourse'})
Student.belongsToMany(Course, { through: 'StudentCourse'})

ضمن belongsToMany()الطريقة ، تقوم بتمرير throughالتكوين باسم النموذج كخيار التكوين. في هذه الحالة ، هو StudentCourse. هذا هو الجدول الذي يدير علاقات أطراف بأطراف.

أخيرًا ، يمكنك التحقق مما إذا كان الارتباط يعمل بشكل صحيح عن طريق استرداد جميع بيانات الدورة التدريبية مع الطلاب المرتبطين. ستفعل ذلك عن طريق تمرير includeالمعلمة داخل findAll()الطريقة. أضف الأسطر التالية إلى many_to_many.js:

...
sequelize.sync({ force: true }).then(() => {
    Course.bulkCreate(course_data, { validate: true }).then(() => {
        Student.bulkCreate(student_data, { validate: true }).then(() => {
            StudentCourse.bulkCreate(student_course_data, { validate: true }).then(() => {
                Course.findAll({
                    include: {
                        model: Student,
                    },
                }).then(result => {
                    console.log(result);
                }).catch((error) => {
                    console.error('Failed to retrieve data : ', error);
                });
            }).catch((error) => {
                console.log(error);
            });
        }).catch((error) => {
            console.log(error);
        });
    }).catch((error) => {
        console.log(error);
    });
}).catch((error) => {
    console.error('Unable to create table : ', error);
});

الكود الكامل يبدو كما يلي:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
);

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
    student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
    },
    name: {
       type: DataTypes.STRING,
       allowNull: false
    }
});

const Course = sequelize.define("courses", {
    course_name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const StudentCourse = sequelize.define('StudentCourse', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
      allowNull: false
    }
  });

const course_data = [
    {course_name : "Science"},
    {course_name : "Maths"},
    {course_name : "History"}
]

const student_data = [
    {name : "John Baker", courseId: 2},
    {name : "Max Butler", courseId: 1},
    {name : "Ryan Fisher", courseId: 3},
    {name : "Robert Gray", courseId: 2},
    {name : "Sam Lewis", courseId: 1}
]

const student_course_data = [
    {studentId : 1, courseId: 1},
    {studentId : 2, courseId: 1},
    {studentId : 2, courseId: 3},
    {studentId : 3, courseId: 2},
    {studentId : 1, courseId: 2},
]

Course.belongsToMany(Student, { through: 'StudentCourse'})
Student.belongsToMany(Course, { through: 'StudentCourse'})

sequelize.sync({ force: true }).then(() => {
    Course.bulkCreate(course_data, { validate: true }).then(() => {
        Student.bulkCreate(student_data, { validate: true }).then(() => {
            StudentCourse.bulkCreate(student_course_data, { validate: true }).then(() => {
                Course.findAll({
                    include: {
                        model: Student,
                    },
                }).then(result => {
                    console.log(result);
                }).catch((error) => {
                    console.error('Failed to retrieve data : ', error);
                });
            }).catch((error) => {
                console.log(error);
            });
        }).catch((error) => {
            console.log(error);
        });
    }).catch((error) => {
        console.log(error);
    });
}).catch((error) => {
    console.error('Unable to create table : ', error);
});

أحفظ وأغلق الملف.

قم بتشغيل الملف باستخدام الأمر التالي:

node many_to_many.js

سيكون الإخراج طويلاً ، لكنه سيبدو مشابهًا لما يلي:

Output[ courses {
    dataValues:
     { id: 1,
       course_name: 'Science',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _previousDataValues:
     { id: 1,
       course_name: 'Science',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _changed: Set {},
    _options:
     { isNewRecord: false,
       _schema: null,
       _schemaDelimiter: '',
       include: [Array],
       includeNames: [Array],
       includeMap: [Object],
       includeValidated: true,
       attributes: [Array],
       raw: true },
    isNewRecord: false,
    students: [ [students], [students] ] },
  courses {
    dataValues:
     { id: 2,
       course_name: 'Maths',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _previousDataValues:
...

كما ترى في هذا الإخراج ، تم استرداد الدورات التدريبية مع الطلاب المرتبطين بها. داخل coursesالكتلة ، سترى idقيمًا منفصلة تشير إلى كل دورة. على سبيل المثال ، id: 1متصل بفصل course_name: Scienceالعلوم ، بينما id: 2فئة الرياضيات ، وهكذا.

في قاعدة البيانات ، يمكنك رؤية الجداول الثلاثة التي تم إنشاؤها مع بيانات العينة التي أدخلتها.

في هذه الخطوة ، استخدمت Sequelize لإنشاء ارتباطات رأس برأس وواحد بأطراف ومتعددة. بعد ذلك ، ستعمل مع الاستعلامات الأولية.

الخطوة 5 - العمل مع الاستعلامات الأولية

في هذه الخطوة ، ستعمل مع الاستعلامات الأولية في Sequelize. في الخطوات السابقة ، استخدمت طرق Sequelize المضمنة ، مثل insert()و findAll()، للتعامل مع إدراج البيانات والتحديد من قاعدة البيانات. ربما لاحظت أن هذه التوابع تتبع نمطًا معينًا لكتابة استعلام. ومع ذلك ، مع استخدام الاستعلامات الأولية ، لا داعي للقلق بشأن أساليب وأنماط Sequelize المضمنة. باستخدام معرفتك باستعلامات SQL ، يمكنك إجراء مجموعة من الاستعلامات في Sequelize من البسيطة إلى الأكثر تقدمًا.

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

SELECT * FROM table_name;
DELETE FROM table_name WHERE condition;
UPDATE table_name SET y = 42 WHERE x = 12;

في Sequelize ، يمكن استخدام الاستعلامات الأولية مع منهجيتين أساسيتين: استبدال المصفوفة واستبدال الكائن. عندما تقوم بتمرير القيم إلى استعلام SQL ، يمكنك استخدام إما مصفوفة أو كائن للقيام بذلك الاستبدال.

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

بعد ذلك ، ستضيف بعض البيانات الأولية لبدء العمل مع الاستعلامات الأولية. قم بإنشاء ملف جديد يسمى add_student_records.jsوإضافة كتل التعليمات البرمجية التالية ، والتي تحتوي على طرق Sequelize التي تمت مناقشتها مسبقًا لـ authenticate()، sync()و ، و bulkCreate().

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
    student_id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true,
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const student_data = [
    {name : "John Baker"},
    {name : "Max Butler"},
    {name : "Ryan Fisher"},
    {name : "Robert Gray"},
    {name : "Sam Lewis"}
]

sequelize.sync({ force: true }).then(() => {

    Student.bulkCreate(student_data, { validate: true }).then((result) => {
        console.log(result);
    }).catch((error) => {
        console.log(error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

هنا ، تقوم ببدء اتصال قاعدة البيانات ، وإنشاء النموذج ، وإدراج بعض سجلات الطلاب داخل قاعدة البيانات الجديدة.

أحفظ وأغلق الملف.

بعد ذلك ، قم بتشغيل هذا البرنامج النصي باستخدام الأمر التالي:

node add_student_records.js

سيكون الإخراج شيئًا مشابهًا لما يلي. ستكون طويلة جدًا ، ولكن سيتم إرجاع جميع سجلات الطلاب التي أدخلتها على النحو التالي. لاحظ أنه نظرًا لأن قيمة UUID ( المعرفات الفريدة عالميًاstudent_id ) يتم إنشاؤها تلقائيًا ، فستكون مختلفة اعتمادًا على المستخدم.

Output
Executing (default): SELECT 1+1 AS result
Executing (default): DROP TABLE IF EXISTS `students`;
Connection has been established successfully.
Executing (default): DROP TABLE IF EXISTS `students`;
Executing (default): CREATE TABLE IF NOT EXISTS `students` (`student_id` CHAR(36) BINARY , `name` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`student_id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `students`
Executing (default): INSERT INTO `students` (`student_id`,`name`,`createdAt`,`updatedAt`) VALUES ('45d1f26c-ba76-431f-ac5f-f41282351710','John Baker','2022-06-03 07:27:49','2022-06-03 07:27:49'),('1cb4e34d-bfcf-4a97-9624-e400b9a1a5f2','Max Butler','2022-06-03 07:27:49','2022-06-03 07:27:49'),('954c576b-ba1c-4dbc-a5c6-8eaf22bbbb04','Ryan Fisher','2022-06-03 07:27:49','2022-06-03 07:27:49'),('e0f15cd3-0025-4032-bfe8-774e38e14c5f','Robert Gray','2022-06-03 07:27:49','2022-06-03 07:27:49'),('826a0ec9-edd0-443f-bb12-068235806659','Sam Lewis','2022-06-03 07:27:49','2022-06-03 07:27:49');
[
  students {
    dataValues: {
      student_id: '45d1f26c-ba76-431f-ac5f-f41282351710'`,
      name: 'John Baker',
      createdAt: 2022-06-03T07:27:49.453Z,
      updatedAt: 2022-06-03T07:27:49.453Z
    },
    _previousDataValues: {
      name: 'John Baker',
      student_id: '45d1f26c-ba76-431f-ac5f-f41282351710',
      createdAt: 2022-06-03T07:27:49.453Z,
      updatedAt: 2022-06-03T07:27:49.453Z
    },

…

في القسم التالي ، ستقوم بتطبيق الاستعلامات الأولية باستخدام أحد student_idالمخرجات في كتلة التعليمات البرمجية أعلاه. انسخه حتى يكون لديك في الأقسام التالية ، حيث ستستخدم query()الطريقة لاستبدال المصفوفة والكائنات.

استبدال المصفوفة

في هذا القسم ، ستستخدم query()طريقة استبدال المصفوفة. باستخدام هذه الطريقة ، يمكن لـ Sequelize تنفيذ استعلامات SQL الأولية أو المعدة بالفعل.

للبدء ، انسخ محتويات server.jsالملف من الخطوة 1 ، حيث يتضمن ذلك Sequelize()طريقة البدء وبدء قاعدة البيانات. الصق المحتويات في ملف جديد يسمى array_raw_query.js. قم بتحديث اسم قاعدة البيانات إلى sample_student_db:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

في نهاية الملف ، أضف مقطع التعليمات البرمجية التالي لاستبدال مصفوفة ، مع التأكد من استبداله REPLACE_STUDENT_IDبالقيمة student_idالتي نسختها في القسم السابق.

...
sequelize.query(
    'SELECT * FROM students WHERE student_id = ?',
    {
      replacements: ['REPLACE_STUDENT_ID'],
      type: sequelize.QueryTypes.SELECT
    }
).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

لاستبدال الصفيف ، يمكنك تمرير query()الأسلوب باستخدام استعلام SQL وكائن التكوين. يحتوي على replacementsالقيمة والنوع. للاستبدال ، تقوم بتمرير البيانات كمصفوفة والتقاط هذه القيم باستخدام ?رمز علامة الاستفهام ().

بعد ذلك ، نظرًا لأنك تحتاج إلى الحصول على بيانات حول طالب معين ، student_idيتم تمرير المعلمة كمعامل ثاني. بعد ذلك ، تقوم بتمرير type: sequelize.QueryTypes.SELECTزوج المفتاح والقيمة ، والذي يمكنك استخدامه لتحديد البيانات من قاعدة البيانات.

هناك بعض الأنواع الأخرى أيضًا ، مثل QueryTypes.UPDATEو QueryTypes.DELETE. بناءً على المتطلبات ، يمكنك تحديد النوع الذي يناسب غرضك.

يظهر ما يلي كتلة التعليمات البرمجية الكاملة. هنا تقوم بالاتصال بقاعدة البيانات واسترداد بيانات الطالب المحددة باستخدام استعلام خام.

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

sequelize.query(
    'SELECT * FROM students WHERE student_id = ?',
    {
      replacements: ['REPLACE_STUDENT_ID'],
      type: sequelize.QueryTypes.SELECT
    }
).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

احفظ وأغلق ملفك.

بعد ذلك ، يمكنك تشغيل هذا البرنامج النصي باستخدام الأمر التالي:

node array_raw_query.js

سترى ناتجًا مشابهًا لما يلي:

Output
Connection has been established successfully.
[ { student_id: 'STUDENT_ID_YOU_RETRIEVED',
    name: 'Robert Gray',
    createdAt: 2022-05-06T13:14:50.000Z,
    updatedAt: 2022-05-06T13:14:50.000Z } ]

بسبب المحدد student_id، قد تختلف قيم الإخراج الخاصة بك.

استبدال الكائن

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

للبدء ، قم بإنشاء ملف جديد يسمى object_raw_query.jsولصق كتل التعليمات البرمجية الكاملة من server.jsالملف ، مع تحديث قاعدة البيانات إلى sample_student_db.

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

بعد ذلك ، أضف كتلة التعليمات البرمجية التالية إلى نهاية object_raw_query.jsالملف الجديد:

...
sequelize.query(
  'SELECT * FROM students WHERE student_id = :id',
  {
    replacements: { id: 'REPLACE_STUDENT_ID' },
    type: sequelize.QueryTypes.SELECT
  }
 ).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

هنا ، تحصل على بيانات الطالب المحددة باستخدام طريقة استبدال الكائن. تقوم بإنشاء replacementكائن ، مع تعيين idمعلومات الطالب التي ترغب في استردادها { id: 'REPLACE_STUDENT_ID' }:.

في query()، تشير إلى 'SELECT * FROM students WHERE student_id = :id':. باستخدام هذه query()الطريقة ، تقوم بتمرير قيمة الاستبدال ككائن ، ولهذا تُعرف هذه الطريقة باسم استبدال الكائن.

ها هو الكود الكامل:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

sequelize.query(
  'SELECT * FROM students WHERE student_id = :id',
  {
    replacements: { id: 'REPLACE_STUDENT_ID' },
    type: sequelize.QueryTypes.SELECT
  }
 ).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

أحفظ وأغلق الملف.

بعد ذلك ، قم بتشغيل هذا البرنامج النصي باستخدام الأمر التالي:

node object_raw_query.js

سيبدو الإخراج مشابهًا لما يلي:

Output
Connection has been established successfully.
[ { student_id: 'STUDENT_ID_YOU_RETRIEVED',
    name: 'Robert Gray',
    createdAt: 2022-05-06T13:14:50.000Z,
    updatedAt: 2022-05-06T13:14:50.000Z } ]

بسبب المحدد student_id، قد تختلف قيم الإخراج الخاصة بك.

في هذه الخطوة ، عملت مع الاستعلامات الأولية Sequelize باستخدام طريقتين مختلفتين: استبدال المصفوفة واستبدال الكائن.

استنتاج

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

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

مصدر المقال الأصلي على https://www.digitalocean.com

#sequelize #node #mysql #database 

What is GEEK

Buddha Community

كيفية استخدام Sequelize مع Node.js و MySQL

NBB: Ad-hoc CLJS Scripting on Node.js

Nbb

Not babashka. Node.js babashka!?

Ad-hoc CLJS scripting on Node.js.

Status

Experimental. Please report issues here.

Goals and features

Nbb's main goal is to make it easy to get started with ad hoc CLJS scripting on Node.js.

Additional goals and features are:

  • Fast startup without relying on a custom version of Node.js.
  • Small artifact (current size is around 1.2MB).
  • First class macros.
  • Support building small TUI apps using Reagent.
  • Complement babashka with libraries from the Node.js ecosystem.

Requirements

Nbb requires Node.js v12 or newer.

How does this tool work?

CLJS code is evaluated through SCI, the same interpreter that powers babashka. Because SCI works with advanced compilation, the bundle size, especially when combined with other dependencies, is smaller than what you get with self-hosted CLJS. That makes startup faster. The trade-off is that execution is less performant and that only a subset of CLJS is available (e.g. no deftype, yet).

Usage

Install nbb from NPM:

$ npm install nbb -g

Omit -g for a local install.

Try out an expression:

$ nbb -e '(+ 1 2 3)'
6

And then install some other NPM libraries to use in the script. E.g.:

$ npm install csv-parse shelljs zx

Create a script which uses the NPM libraries:

(ns script
  (:require ["csv-parse/lib/sync$default" :as csv-parse]
            ["fs" :as fs]
            ["path" :as path]
            ["shelljs$default" :as sh]
            ["term-size$default" :as term-size]
            ["zx$default" :as zx]
            ["zx$fs" :as zxfs]
            [nbb.core :refer [*file*]]))

(prn (path/resolve "."))

(prn (term-size))

(println (count (str (fs/readFileSync *file*))))

(prn (sh/ls "."))

(prn (csv-parse "foo,bar"))

(prn (zxfs/existsSync *file*))

(zx/$ #js ["ls"])

Call the script:

$ nbb script.cljs
"/private/tmp/test-script"
#js {:columns 216, :rows 47}
510
#js ["node_modules" "package-lock.json" "package.json" "script.cljs"]
#js [#js ["foo" "bar"]]
true
$ ls
node_modules
package-lock.json
package.json
script.cljs

Macros

Nbb has first class support for macros: you can define them right inside your .cljs file, like you are used to from JVM Clojure. Consider the plet macro to make working with promises more palatable:

(defmacro plet
  [bindings & body]
  (let [binding-pairs (reverse (partition 2 bindings))
        body (cons 'do body)]
    (reduce (fn [body [sym expr]]
              (let [expr (list '.resolve 'js/Promise expr)]
                (list '.then expr (list 'clojure.core/fn (vector sym)
                                        body))))
            body
            binding-pairs)))

Using this macro we can look async code more like sync code. Consider this puppeteer example:

(-> (.launch puppeteer)
      (.then (fn [browser]
               (-> (.newPage browser)
                   (.then (fn [page]
                            (-> (.goto page "https://clojure.org")
                                (.then #(.screenshot page #js{:path "screenshot.png"}))
                                (.catch #(js/console.log %))
                                (.then #(.close browser)))))))))

Using plet this becomes:

(plet [browser (.launch puppeteer)
       page (.newPage browser)
       _ (.goto page "https://clojure.org")
       _ (-> (.screenshot page #js{:path "screenshot.png"})
             (.catch #(js/console.log %)))]
      (.close browser))

See the puppeteer example for the full code.

Since v0.0.36, nbb includes promesa which is a library to deal with promises. The above plet macro is similar to promesa.core/let.

Startup time

$ time nbb -e '(+ 1 2 3)'
6
nbb -e '(+ 1 2 3)'   0.17s  user 0.02s system 109% cpu 0.168 total

The baseline startup time for a script is about 170ms seconds on my laptop. When invoked via npx this adds another 300ms or so, so for faster startup, either use a globally installed nbb or use $(npm bin)/nbb script.cljs to bypass npx.

Dependencies

NPM dependencies

Nbb does not depend on any NPM dependencies. All NPM libraries loaded by a script are resolved relative to that script. When using the Reagent module, React is resolved in the same way as any other NPM library.

Classpath

To load .cljs files from local paths or dependencies, you can use the --classpath argument. The current dir is added to the classpath automatically. So if there is a file foo/bar.cljs relative to your current dir, then you can load it via (:require [foo.bar :as fb]). Note that nbb uses the same naming conventions for namespaces and directories as other Clojure tools: foo-bar in the namespace name becomes foo_bar in the directory name.

To load dependencies from the Clojure ecosystem, you can use the Clojure CLI or babashka to download them and produce a classpath:

$ classpath="$(clojure -A:nbb -Spath -Sdeps '{:aliases {:nbb {:replace-deps {com.github.seancorfield/honeysql {:git/tag "v2.0.0-rc5" :git/sha "01c3a55"}}}}}')"

and then feed it to the --classpath argument:

$ nbb --classpath "$classpath" -e "(require '[honey.sql :as sql]) (sql/format {:select :foo :from :bar :where [:= :baz 2]})"
["SELECT foo FROM bar WHERE baz = ?" 2]

Currently nbb only reads from directories, not jar files, so you are encouraged to use git libs. Support for .jar files will be added later.

Current file

The name of the file that is currently being executed is available via nbb.core/*file* or on the metadata of vars:

(ns foo
  (:require [nbb.core :refer [*file*]]))

(prn *file*) ;; "/private/tmp/foo.cljs"

(defn f [])
(prn (:file (meta #'f))) ;; "/private/tmp/foo.cljs"

Reagent

Nbb includes reagent.core which will be lazily loaded when required. You can use this together with ink to create a TUI application:

$ npm install ink

ink-demo.cljs:

(ns ink-demo
  (:require ["ink" :refer [render Text]]
            [reagent.core :as r]))

(defonce state (r/atom 0))

(doseq [n (range 1 11)]
  (js/setTimeout #(swap! state inc) (* n 500)))

(defn hello []
  [:> Text {:color "green"} "Hello, world! " @state])

(render (r/as-element [hello]))

Promesa

Working with callbacks and promises can become tedious. Since nbb v0.0.36 the promesa.core namespace is included with the let and do! macros. An example:

(ns prom
  (:require [promesa.core :as p]))

(defn sleep [ms]
  (js/Promise.
   (fn [resolve _]
     (js/setTimeout resolve ms))))

(defn do-stuff
  []
  (p/do!
   (println "Doing stuff which takes a while")
   (sleep 1000)
   1))

(p/let [a (do-stuff)
        b (inc a)
        c (do-stuff)
        d (+ b c)]
  (prn d))
$ nbb prom.cljs
Doing stuff which takes a while
Doing stuff which takes a while
3

Also see API docs.

Js-interop

Since nbb v0.0.75 applied-science/js-interop is available:

(ns example
  (:require [applied-science.js-interop :as j]))

(def o (j/lit {:a 1 :b 2 :c {:d 1}}))

(prn (j/select-keys o [:a :b])) ;; #js {:a 1, :b 2}
(prn (j/get-in o [:c :d])) ;; 1

Most of this library is supported in nbb, except the following:

  • destructuring using :syms
  • property access using .-x notation. In nbb, you must use keywords.

See the example of what is currently supported.

Examples

See the examples directory for small examples.

Also check out these projects built with nbb:

API

See API documentation.

Migrating to shadow-cljs

See this gist on how to convert an nbb script or project to shadow-cljs.

Build

Prequisites:

  • babashka >= 0.4.0
  • Clojure CLI >= 1.10.3.933
  • Node.js 16.5.0 (lower version may work, but this is the one I used to build)

To build:

  • Clone and cd into this repo
  • bb release

Run bb tasks for more project-related tasks.

Download Details:
Author: borkdude
Download Link: Download The Source Code
Official Website: https://github.com/borkdude/nbb 
License: EPL-1.0

#node #javascript

Hire Dedicated Node.js Developers - Hire Node.js Developers

If you look at the backend technology used by today’s most popular apps there is one thing you would find common among them and that is the use of NodeJS Framework. Yes, the NodeJS framework is that effective and successful.

If you wish to have a strong backend for efficient app performance then have NodeJS at the backend.

WebClues Infotech offers different levels of experienced and expert professionals for your app development needs. So hire a dedicated NodeJS developer from WebClues Infotech with your experience requirement and expertise.

So what are you waiting for? Get your app developed with strong performance parameters from WebClues Infotech

For inquiry click here: https://www.webcluesinfotech.com/hire-nodejs-developer/

Book Free Interview: https://bit.ly/3dDShFg

#hire dedicated node.js developers #hire node.js developers #hire top dedicated node.js developers #hire node.js developers in usa & india #hire node js development company #hire the best node.js developers & programmers

Aria Barnes

Aria Barnes

1622719015

Why use Node.js for Web Development? Benefits and Examples of Apps

Front-end web development has been overwhelmed by JavaScript highlights for quite a long time. Google, Facebook, Wikipedia, and most of all online pages use JS for customer side activities. As of late, it additionally made a shift to cross-platform mobile development as a main technology in React Native, Nativescript, Apache Cordova, and other crossover devices. 

Throughout the most recent couple of years, Node.js moved to backend development as well. Designers need to utilize a similar tech stack for the whole web project without learning another language for server-side development. Node.js is a device that adjusts JS usefulness and syntax to the backend. 

What is Node.js? 

Node.js isn’t a language, or library, or system. It’s a runtime situation: commonly JavaScript needs a program to work, however Node.js makes appropriate settings for JS to run outside of the program. It’s based on a JavaScript V8 motor that can run in Chrome, different programs, or independently. 

The extent of V8 is to change JS program situated code into machine code — so JS turns into a broadly useful language and can be perceived by servers. This is one of the advantages of utilizing Node.js in web application development: it expands the usefulness of JavaScript, permitting designers to coordinate the language with APIs, different languages, and outside libraries.

What Are the Advantages of Node.js Web Application Development? 

Of late, organizations have been effectively changing from their backend tech stacks to Node.js. LinkedIn picked Node.js over Ruby on Rails since it took care of expanding responsibility better and decreased the quantity of servers by multiple times. PayPal and Netflix did something comparative, just they had a goal to change their design to microservices. We should investigate the motivations to pick Node.JS for web application development and when we are planning to hire node js developers. 

Amazing Tech Stack for Web Development 

The principal thing that makes Node.js a go-to environment for web development is its JavaScript legacy. It’s the most well known language right now with a great many free devices and a functioning local area. Node.js, because of its association with JS, immediately rose in ubiquity — presently it has in excess of 368 million downloads and a great many free tools in the bundle module. 

Alongside prevalence, Node.js additionally acquired the fundamental JS benefits: 

  • quick execution and information preparing; 
  • exceptionally reusable code; 
  • the code is not difficult to learn, compose, read, and keep up; 
  • tremendous asset library, a huge number of free aides, and a functioning local area. 

In addition, it’s a piece of a well known MEAN tech stack (the blend of MongoDB, Express.js, Angular, and Node.js — four tools that handle all vital parts of web application development). 

Designers Can Utilize JavaScript for the Whole Undertaking 

This is perhaps the most clear advantage of Node.js web application development. JavaScript is an unquestionable requirement for web development. Regardless of whether you construct a multi-page or single-page application, you need to know JS well. On the off chance that you are now OK with JavaScript, learning Node.js won’t be an issue. Grammar, fundamental usefulness, primary standards — every one of these things are comparable. 

In the event that you have JS designers in your group, it will be simpler for them to learn JS-based Node than a totally new dialect. What’s more, the front-end and back-end codebase will be basically the same, simple to peruse, and keep up — in light of the fact that they are both JS-based. 

A Quick Environment for Microservice Development 

There’s another motivation behind why Node.js got famous so rapidly. The environment suits well the idea of microservice development (spilling stone monument usefulness into handfuls or many more modest administrations). 

Microservices need to speak with one another rapidly — and Node.js is probably the quickest device in information handling. Among the fundamental Node.js benefits for programming development are its non-obstructing algorithms.

Node.js measures a few demands all at once without trusting that the first will be concluded. Many microservices can send messages to one another, and they will be gotten and addressed all the while. 

Versatile Web Application Development 

Node.js was worked in view of adaptability — its name really says it. The environment permits numerous hubs to run all the while and speak with one another. Here’s the reason Node.js adaptability is better than other web backend development arrangements. 

Node.js has a module that is liable for load adjusting for each running CPU center. This is one of numerous Node.js module benefits: you can run various hubs all at once, and the environment will naturally adjust the responsibility. 

Node.js permits even apportioning: you can part your application into various situations. You show various forms of the application to different clients, in light of their age, interests, area, language, and so on. This builds personalization and diminishes responsibility. Hub accomplishes this with kid measures — tasks that rapidly speak with one another and share a similar root. 

What’s more, Node’s non-hindering solicitation handling framework adds to fast, letting applications measure a great many solicitations. 

Control Stream Highlights

Numerous designers consider nonconcurrent to be one of the two impediments and benefits of Node.js web application development. In Node, at whatever point the capacity is executed, the code consequently sends a callback. As the quantity of capacities develops, so does the number of callbacks — and you end up in a circumstance known as the callback damnation. 

In any case, Node.js offers an exit plan. You can utilize systems that will plan capacities and sort through callbacks. Systems will associate comparable capacities consequently — so you can track down an essential component via search or in an envelope. At that point, there’s no compelling reason to look through callbacks.

 

Final Words

So, these are some of the top benefits of Nodejs in web application development. This is how Nodejs is contributing a lot to the field of web application development. 

I hope now you are totally aware of the whole process of how Nodejs is really important for your web project. If you are looking to hire a node js development company in India then I would suggest that you take a little consultancy too whenever you call. 

Good Luck!

Original Source

#node.js development company in india #node js development company #hire node js developers #hire node.js developers in india #node.js development services #node.js development

Node JS Development Company| Node JS Web Developers-SISGAIN

Top organizations and start-ups hire Node.js developers from SISGAIN for their strategic software development projects in Illinois, USA. On the off chance that you are searching for a first rate innovation to assemble a constant Node.js web application development or a module, Node.js applications are the most appropriate alternative to pick. As Leading Node.js development company, we leverage our profound information on its segments and convey solutions that bring noteworthy business results. For more information email us at hello@sisgain.com

#node.js development services #hire node.js developers #node.js web application development #node.js development company #node js application

كيفية استخدام Sequelize مع Node.js و MySQL

تعرف على كيفية تثبيت وتهيئة Sequelize مع MySQL. استخدام Sequelize لإنشاء قواعد بيانات ونماذج ، بالإضافة إلى إجراء عمليات الإدراج والاختيار والحذف والمزيد 

Sequelize هو مخطط علاقات كائنات يستند إلى Node.js يجعل من السهل العمل مع قواعد بيانات MySQL و MariaDB و SQLite و PostgreSQL والمزيد. ينفذ مخطط علاقة الكائن وظائف مثل معالجة سجلات قاعدة البيانات من خلال تمثيل البيانات ككائنات. يحتوي Sequelize على آلية ترحيل قوية يمكنها تحويل مخططات قاعدة البيانات الحالية إلى إصدارات جديدة. بشكل عام ، يوفر Sequelize دعمًا ممتازًا لمزامنة قاعدة البيانات ، والتحميل الجاد ، والجمعيات ، والمعاملات ، وترحيل قواعد البيانات مع تقليل وقت التطوير ومنع حقن SQL.

في هذا البرنامج التعليمي ، ستقوم بتثبيت وتهيئة Sequelize مع MySQL في بيئة التطوير المحلية الخاصة بك. بعد ذلك ، ستستخدم Sequelize لإنشاء قواعد بيانات ونماذج ، بالإضافة إلى إجراء عمليات insertو selectو delete. بعد ذلك ، ستقوم بإنشاء ارتباطات Sequelize للعلاقات واحد لواحد ، واحد لكثير ، وعديد إلى متعدد . أخيرًا ، ستقوم بإنشاء استعلامات خام Sequelize لاستبدال المصفوفات والكائنات .

تم اختبار هذا البرنامج التعليمي على الإصدار 14.17.6 من Node.js والإصدار npm6.14.15 على نظام التشغيل macOS Catalina.

الخطوة 1 - تثبيت وتكوين التسلسل

في هذه الخطوة ، ستقوم بتثبيت Sequelize وإنشاء الاتصال بقاعدة بيانات MySQL. للقيام بذلك ، ستقوم أولاً بإنشاء تطبيق Node.js. بعد ذلك ، ستقوم بتثبيت Sequelize ، وتهيئة قاعدة بيانات MySQL ، وتطوير تطبيق بسيط.

تثبيت Sequelize

ابدأ بإنشاء مجلد المشروع. في هذا المثال ، يمكنك استخدام hello-world. بمجرد إنشاء المجلد ، انتقل إلى المجلد باستخدام الجهاز الطرفي:

mkdir hello-world
cd hello-world

بعد ذلك ، أنشئ نموذجًا لتطبيق Node.js باستخدام الأمر التالي:

npm init

بعد ذلك ، سيُطلب منك الإجابة عن بعض أسئلة الإعداد. استخدم الإخراج التالي للتكوين الخاص بك. اضغط ENTERلاستخدام القيمة الافتراضية المعروضة وتأكد من تعيين نقطة الدخول الرئيسية على أنها server.js. يؤدي هذا إلى إنشاء هيكل مشروع يسهل صيانته.

سيبدو الإخراج على النحو التالي ، والذي سوف يملأ package.jsonالملف:

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

بعد ذلك ، قم بإنشاء ملف فارغ server.jsداخل مجلد المشروع:

touch server.js

بعد اتباع الخطوات السابقة ، سيبدو هيكل المجلد النهائي كما يلي:

hello-world/
├─ package.json
├─ server.js

يمكنك الآن تثبيت Sequelize باستخدام الأمر التالي:

npm i sequelize@6.11.0

ملاحظة: يقوم هذا الأمر بتثبيت الإصدار 6.11.0. إذا كنت بحاجة إلى تثبيت أحدث إصدار ، فقم بتشغيل npm i sequelize.

بعد هذه التحديثات ، package.jsonيبدو الملف الآن كما يلي:

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "sequelize": "^6.11.0"
  }
}

في dependenciesالقسم ، سترى الآن تبعية تكميلية.

لقد قمت بإعداد المشروع وتثبيت Sequelize. بعد ذلك ، ستنشئ نموذج قاعدة بيانات للاتصال بها.

إنشاء نموذج قاعدة بيانات

كجزء من المتطلبات الأساسية ، قمت بتثبيت MySQL وضبطها ، والتي تضمنت إنشاء مستخدم. الآن سوف تقوم بإنشاء قاعدة بيانات فارغة.

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

mysql -u your_username -p

-uهو اسم المستخدم -pويتم تمرير الخيار إذا تم تأمين الحساب بكلمة مرور.

سيطلب خادم MySQL كلمة مرور قاعدة البيانات الخاصة بك. اكتب كلمة المرور الخاصة بك واضغط ENTER.

بمجرد تسجيل الدخول ، قم بإنشاء قاعدة بيانات تسمى hello_world_dbباستخدام الأمر التالي:

CREATE DATABASE hello_world_db;

للتحقق مما إذا كنت قد أنشأت قاعدة البيانات بنجاح ، يمكنك استخدام هذا الأمر:

SHOW DATABASES;

سيكون الإخراج الخاص بك مشابهًا لهذا:

+--------------------+
|      Database      |
+--------------------+
| hello_world_db     |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

بعد إنشاء نموذج قاعدة البيانات ، قطع الاتصال بخادم MySQL:

mysql> QUIT

الآن ، تحتاج إلى تثبيت برنامج تشغيل يدوي لقاعدة البيانات التي تختارها. نظرًا لأن Sequelize يوفر ميزات ORM فقط ، فإنه لا يتضمن برامج تشغيل قواعد البيانات المضمنة. لذلك ، ستحتاج إلى تثبيت برامج التشغيل وفقًا لتفضيلاتك. للقيام بذلك ، انتقل إلى دليل المشروع باستخدام المحطة الطرفية وقم بتثبيت برنامج تشغيل MySQL للمشروع باستخدام الأمر التالي:

npm install --save mysql2

في هذه الحالة ، أنت تستخدم برنامج التشغيل لـ MySQL.

ملاحظة: نظرًا لأن هذا البرنامج التعليمي يستخدم MySQL كقاعدة بيانات ، فأنت تستخدم برنامج تشغيل لذلك. اعتمادًا على قاعدة البيانات الخاصة بك ، يمكنك تثبيت برنامج التشغيل يدويًا مثل:

  • npm install --save pg pg-hstore # Postgres
  • npm install --save mysql2
  • npm install --save mariadb
  • npm install --save sqlite3
  • npm install --save tedious # Microsoft SQL Server

الآن بعد أن أصبح لديك نموذج قاعدة بيانات ، يمكنك إنشاء أول تطبيق Sequelize باستخدام اتصال قاعدة البيانات.

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

في هذا القسم ، ستقوم بتوصيل تطبيق Node.js بقاعدة بيانات MySQL باستخدام Sequelize.

للاتصال بقاعدة البيانات ، افتح server.jsللتحرير باستخدام nanoأو محرر الكود المفضل لديك:

nano server.js

هنا ، ستقوم بإنشاء اتصال قاعدة بيانات في التطبيق الخاص بك باستخدام مثيل Sequelize. في هذه new Sequelize()الطريقة ، قم بتمرير معلمات خادم MySQL وبيانات اعتماد قاعدة البيانات على النحو التالي ، واستبدالها DATABASE_USERNAMEببيانات DATABASE_PASSWORDاعتماد مستخدم MySQL الخاص بك:

const Sequelize = require("sequelize");
const sequelize = new Sequelize(
 'hello_world_db',
 'DATABASE_USERNAME',
 'DATABASE_PASSWORD',
  {
    host: 'DATABASE_HOST',
    dialect: 'mysql'
  }
);

hostهو المكان الذي يتم فيه استضافة خادم MySQL ، لذلك ستحتاج إلى توفير عنوان URL للخادم أو عنوان IP. إذا كنت تستخدم خادم MySQL مثبتًا محليًا ، فيمكنك استبداله DATABASE_HOSTبالقيمة localhostأو 127.0.0.1كقيمة.

وبالمثل ، إذا كنت تستخدم خادمًا بعيدًا ، فتأكد من استبدال قيم اتصال قاعدة البيانات وفقًا لتفاصيل الخادم البعيد المناسبة.

ملاحظة: إذا كنت تستخدم أي برنامج خادم قاعدة بيانات آخر ، فيمكنك استبدال معلمة اللهجة وفقًا لذلك. اللهجة: 'mysql'، 'mariadb'، 'postgres'، 'mssql'.

بعد ذلك ، قم باستدعاء طريقة قائمة على الوعد authenticate() لإنشاء اتصال قاعدة بيانات بالتطبيق. للقيام بذلك ، أضف كتلة التعليمات البرمجية التالية إلى ملفك server.js:

...

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

يتم authenticate()استخدام الطريقة للاتصال بقاعدة البيانات واختبار ما إذا كانت بيانات الاعتماد المقدمة صحيحة أم لا. هنا ، يتم فتح اتصال قاعدة البيانات افتراضيًا ويمكن استخدام نفس الاتصال لجميع الاستعلامات. كلما احتجت إلى إغلاق الاتصال ، اتصل sequelize.close()بالطريقة بعد هذه authenticate()المكالمة. لمعرفة المزيد حول Sequelize ، يرجى الاطلاع على دليل البدء .

معظم الطرق التي يوفرها Sequelize غير متزامنة. هذا يعني أنه يمكنك تشغيل العمليات في التطبيق الخاص بك بينما تكون كتلة التعليمات البرمجية غير المتزامنة في وقت التنفيذ. أيضًا ، بعد تنفيذ كتلة التعليمات البرمجية غير المتزامن الناجح ، فإنه يُرجع وعدًا ، وهو القيمة التي يتم إرجاعها في نهاية العملية. لذلك ، في كتل التعليمات البرمجية غير المتزامنة ، يمكنك استخدام then()، catch()وإرجاع finally()البيانات التي تمت معالجتها.

في هذه المرحلة ، server.jsسيبدو الملف كما يلي:

const Sequelize = require("sequelize");

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

احفظ وأغلق ملفك.

في دليل المشروع ، قم بتشغيل server.jsالتطبيق عن طريق تشغيل الأمر التالي:

node server.js

سيبدو الإخراج الخاص بك كما يلي:

Output
Connection has been established successfully!

لقد قمت بإنشاء اتصال قاعدة البيانات بنجاح.

في هذه الخطوة ، قمت بتثبيت Sequelize ، وإنشاء نموذج قاعدة بيانات ، واستخدام Sequelize للاتصال بقاعدة البيانات. بعد ذلك ، ستعمل مع النماذج في Sequelize.

الخطوة 2 - إنشاء جدول قاعدة بيانات باستخدام Sequelize

الآن بعد أن أنشأت نموذج قاعدة بيانات MySQL ، يمكنك استخدام Sequelize لإنشاء جدول وتعبئته بالبيانات. في Sequelize ، يشار إلى جداول قاعدة البيانات كنماذج . النموذج هو تجريد يمثل جدول قاعدة البيانات. تعرّف النماذج عدة أشياء للتسلسل ، مثل اسم الجدول وتفاصيل العمود وأنواع البيانات. في هذه الخطوة ، ستقوم بإنشاء نموذج Sequelize لبيانات الكتاب.

للبدء ، قم بإنشاء ملف جديد يسمى book.model.jsفي دليل المشروع:

nano book.model.js

على غرار الخطوة السابقة ، أضف رمز Sequelize لبدء قاعدة البيانات مع استيراد جديد DataTypesلأعلى الملف:

const { Sequelize, DataTypes } = require("sequelize");

يحتوي Sequelize على العديد من أنواع البيانات المضمنة. للوصول إلى أنواع البيانات هذه ، يمكنك إضافة استيراد لـ DataTypes. يشير هذا البرنامج التعليمي إلى بعض أنواع البيانات المستخدمة بشكل متكرر ، مثل STRINGو INTEGERو و DATEONLY. لمعرفة المزيد حول أنواع البيانات المدعومة الأخرى ، يمكنك الرجوع إلى وثائق Sequelize الرسمية .

بعد ذلك ، قم بتضمين الأسطر التي استخدمتها سابقًا لإنشاء اتصال بقاعدة بيانات MySQL ، وتحديث بيانات اعتماد MySQL وفقًا لذلك:

...

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

بعد ذلك ، ستقوم بإنشاء نموذج يسمى books، والذي يتضمن title، authorو release_date، و subjectID. للقيام بذلك ، استخدم sequelize.define()الطريقة كما هو موضح:

...

const Book = sequelize.define("books", {
   title: {
     type: DataTypes.STRING,
     allowNull: false
   },
   author: {
     type: DataTypes.STRING,
     allowNull: false
   },
   release_date: {
     type: DataTypes.DATEONLY,
   },
   subject: {
     type: DataTypes.INTEGER,
   }
});

تحدد الطريقة sequelize.define()نموذجًا جديدًا يمثل جدولًا في قاعدة البيانات. تقوم كتلة التعليمات البرمجية هذه بإنشاء جدول يسمى booksوتخزين سجلات الكتاب وفقًا لـ title، authorو release_date، و subject.

في هذا الرمز ، allowNullيوضح أن قيمة عمود النموذج لا يمكن أن تكون null. وبالمثل ، إذا كنت بحاجة إلى تعيين مثل هذه القيمة ، فيمكنك استخدامها defaultValue: "value".

بعد ذلك ، ستضيف bookالنموذج إلى قاعدة البيانات الخاصة بك. للقيام بذلك ، ستستخدم sync()الطريقة على النحو التالي:

...

sequelize.sync().then(() => {
   console.log('Book table created successfully!');
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

في sync()الطريقة ، أنت تطلب من Sequelize القيام ببعض الأشياء لقاعدة البيانات. مع هذه المكالمة ، سيجري Sequelize تلقائيًا استعلام SQL إلى قاعدة البيانات وإنشاء جدول ، وطباعة الرسالة Book table created successfully!.

كما ذكرنا سابقًا ، تعد طريقة sync () طريقة قائمة على الوعد ، مما يعني أنه يمكنها أيضًا معالجة الأخطاء. في مقطع التعليمات البرمجية هذا ، ستتحقق مما إذا كان الجدول قد تم إنشاؤه بنجاح. إذا لم يكن كذلك ، فسيعيد خطأ عبر طريقة catch ويطبعه على الإخراج.

ملاحظة: يمكنك إدارة مزامنة النموذج عن طريق تمرير forceالمعلمات لفرض إنشاء جدول جديد إذا لم يكن موجودًا ، أو استخدام جدول موجود. فيما يلي بعض الأمثلة التي قد تكون مفيدة لك أثناء العمل مع Sequelize:

  • model.sync(): يؤدي هذا إلى إنشاء الجدول إذا لم يكن موجودًا بالفعل.
  • model.sync({ force: true }): يؤدي هذا إلى إنشاء الجدول عن طريق إفلاته إذا كان نفس الجدول موجودًا بالفعل.

سيبدو الرمز النهائي كما يلي:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'hello_world_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Book = sequelize.define("books", {
   title: {
     type: DataTypes.STRING,
     allowNull: false
   },
   author: {
     type: DataTypes.STRING,
     allowNull: false
   },
   release_date: {
     type: DataTypes.DATEONLY,
   },
   subject: {
     type: DataTypes.INTEGER,
   }
});

sequelize.sync().then(() => {
   console.log('Book table created successfully!');
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

احفظ وأغلق ملفك.

قم بتشغيل التطبيق الخاص بك باستخدام الأمر التالي:

node book.model.js

سوف تحصل على الإخراج التالي في سطر الأوامر الخاص بك:

Output
Executing (default): SELECT 1+1 AS result
Executing (default): CREATE TABLE IF NOT EXISTS `books` (`id` INTEGER NOT NULL auto_increment , `title` VARCHAR(255) NOT NULL, `author` VARCHAR(255) NOT NULL, `release_date` DATE, `subject` INTEGER, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Connection has been established successfully.
Executing (default): SHOW INDEX FROM `books`
Book table created successfully!

في الإخراج ، سترى سجل الإرجاع يحتوي على الرسالة ، Book table created successfully!. يمكنك التحقق من ذلك عن طريق التحقق من قاعدة البيانات الخاصة بك لرؤية booksالجدول الجديد الذي تم إنشاؤه في hello_world_dbقاعدة البيانات.

للتحقق من إنشاء الجدول الجديد ، قم بتسجيل الدخول إلى مثيل MySQL الخاص بك:

mysql -u YOUR_USERNAME -p

بعد إدخال كلمة المرور الخاصة بك ، قم بالتغيير إلى نموذج قاعدة البيانات:

USE hello_world_db;

ثم قم بتشغيل الأمر لإظهار الجداول:

SHOW TABLES;

سيكون الإخراج الخاص بك مشابهًا لهذا:

+---------------------------+
| Tables_in_hello_world_db |
+---------------------------+
| books                     |
+---------------------------+
1 row in set (0.00 sec)

أخيرًا ، افصل الاتصال بخادم MySQL:

mysql> QUIT

لقد تحققت من bookنجاح إنشاء النموذج. باستخدام هذه العملية ، يمكنك إنشاء أي عدد من النماذج باتباع نفس الإجراء.

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

الخطوة 3 - استخدام Sequelize لاستعلامات قاعدة البيانات

في هذه الخطوة ، ستستخدم استعلامات Sequelize المضمنة للإدراج والتحديد والاختيار مع الجمل الشرطية والحذف.

إدراج سجل جديد

في الخطوة السابقة ، قمت بإنشاء bookنموذج داخل قاعدة البيانات. في هذا القسم ، ستقوم بإدراج البيانات في هذا النموذج.

للبدء ، انسخ محتويات book.model.jsمن الخطوة السابقة. قم بإنشاء ملف جديد يسمى book.controller.jsللتعامل مع منطق الاستعلام. أضف الرمز من book.model.jsإلى book.controller.js.

في book.controller.js، حدد sync()الطريقة. في sync()الطريقة ، أضف الأسطر المميزة التالية:

...

sequelize.sync().then(() => {
   console.log('Book table created successfully!');

   Book.create({
       title: "Clean Code",
       author: "Robert Cecil Martin",
       release_date: "2021-12-14",
       subject: 3
   }).then(res => {
       console.log(res)
   }).catch((error) => {
       console.error('Failed to create a new record : ', error);
   });

}).catch((error) => {
   console.error('Unable to create table : ', error);
});

هنا ، تقوم بإدراج سجل كتاب جديد في booksالنموذج الذي قمت بإنشائه بالفعل باستخدام sync()الطريقة ، والتي تدعم إضافة سجلات جديدة إلى النماذج التي تم إنشاؤها مسبقًا. بمجرد تنفيذ طريقة sync () بنجاح ، فإنها تقوم بتشغيل then()الطريقة. داخل then()الطريقة ، يمكنك استدعاء create()طريقة لإدراج السجلات الجديدة في النموذج.

يمكنك استخدام create()الطريقة لتمرير البيانات التي تريد إضافتها إلى قاعدة البيانات ككائن. سيقوم القسم المميز من التعليمات البرمجية بإدراج إدخال جديد إلى جدولك الحالي books. في هذا المثال ، تضيف Clean Codeبواسطة Robert Cecil Martin، والتي تم تصنيفها subjectبمعرف 3. يمكنك استخدام نفس الرمز ، مع تحديثه بمعلومات كتب أخرى ، لإضافة سجلات جديدة إلى قاعدة البيانات الخاصة بك.

أحفظ وأغلق الملف.

قم بتشغيل التطبيق باستخدام الأمر التالي:

node book.controller.js

سيبدو الإخراج الخاص بك مشابهًا لما يلي:

Output
books {
  dataValues:
   { id: 1,
     title: 'Clean Code',
     author: 'Robert Cecil Martin',
     release_date: '2021-12-14',
     subject: 3,
     updatedAt: 2021-12-14T10:12:16.644Z,
   ...
}

لقد قمت بإدراج سجل جديد في النموذج الذي قمت بإنشائه في قاعدة البيانات. يمكنك الاستمرار في إضافة سجلات متعددة باستخدام نفس العملية.

اختيار كافة السجلات

في هذا القسم ، ستختار وتحصل على جميع سجلات الكتاب من قاعدة البيانات باستخدام findAll()الطريقة. للقيام بذلك ، قم أولاً بفتح الطريقة book.controller.jsالسابقة وإزالتها Book.create(). في sync()الطريقة ، أضف Book.findAll()الطريقة كما هو موضح:

...

sequelize.sync().then(() => {

    Book.findAll().then(res => {
        console.log(res)
    }).catch((error) => {
        console.error('Failed to retrieve data : ', error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

...

أحفظ وأغلق الملف.

بعد ذلك ، قم بتشغيل التطبيق مرة أخرى باستخدام الأمر التالي:

node book.controller.js

سيبدو الإخراج الخاص بك مشابهًا لما يلي:

Output
[
  books {
    dataValues: {
      id: 1,
      title: 'Clean Code',
      author: 'Robert Cecil Martin',
      release_date: '2020-01-01',
      subject: 3,
      createdAt: 2021-02-22T09:13:55.000Z,
      updatedAt: 2021-02-22T09:13:55.000Z
    },
    _previousDataValues: {
      id: 1,
      title: 'Clean Code',
      author: 'Robert Cecil Martin',
      release_date: '2020-01-01',
      subject: 3,
      createdAt: 2021-02-22T09:13:55.000Z,
      updatedAt: 2021-02-22T09:13:55.000Z
    },
...
]

يحتوي الإخراج على جميع بيانات الكتاب ككائن مصفوفة. لقد استخدمت بنجاح findAll()طريقة Sequelize لإرجاع جميع بيانات الكتاب من قاعدة البيانات.

الاختيار مع whereالفقرة

في هذا القسم ، ستحدد القيم بشروط باستخدام whereالجملة. يتم whereاستخدام الجملة لتحديد شرط أثناء جلب البيانات. في هذا البرنامج التعليمي ، ستحصل على كتاب بمعرف سجل محدد من قاعدة البيانات باستخدام findOne()الطريقة.

للقيام بذلك ، افتح book.controller.jsللتحرير ، واحذف findAll()الطريقة ، وأضف الأسطر التالية:

...

sequelize.sync().then(() => {

    Book.findOne({
        where: {
            id : "1"
        }
    }).then(res => {
        console.log(res)
    }).catch((error) => {
        console.error('Failed to retrieve data : ', error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

هنا ، يمكنك تحديد سجل كتاب معين من قاعدة البيانات باستخدام findOne()الطريقة مع whereالخيار. في هذا المثال ، تقوم باسترداد بيانات الكتاب التي idتساوي 1.

أحفظ وأغلق الملف.

بعد ذلك ، قم بتشغيل التطبيق:

node book.controller.js

سيبدو الإخراج الخاص بك مشابهًا لما يلي:

Output
books {
  dataValues: {
    id: 1,
    title: 'Clean Code',
    author: 'Robert Cecil Martin',
    release_date: '2020-01-01',
    subject: 'Science',
    createdAt: 2021-02-22T09:13:55.000Z,
    updatedAt: 2021-02-22T09:13:55.000Z
  },
  ...
}

لقد استخدمت بنجاح whereالعبارات للحصول على بيانات من نماذج Sequelize. يمكنك استخدام whereالجملة في تطبيق قاعدة البيانات لالتقاط البيانات الشرطية.

حذف سجل

لحذف سجل معين من نموذج قاعدة البيانات ، يمكنك استخدام destroy()الطريقة مع whereالخيار. للقيام بذلك ، افتح الطريقة book.controller.jsوأزلها findOne()وأضف الأسطر المميزة التالية:

...
sequelize.sync().then(() => {

  Book.destroy({
      where: {
        id: 2
      }
  }).then(() => {
      console.log("Successfully deleted record.")
  }).catch((error) => {
      console.error('Failed to delete record : ', error);
  });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

هنا ، تقوم بإزالة سجل كتاب من قاعدة البيانات باستخدام destroy()الطريقة مع whereالخيار وتمرير idالكتاب للإزالة. ستقوم بإزالة سجل الكتاب الذي idيساوي 2.

أحفظ وأغلق الملف.

بعد ذلك ، قم بتشغيل التطبيق:

node book.controller.js

سيبدو مخرجاتك كما يلي:

Output
Successfully deleted record.

تم حذف السجل.

في هذه الخطوة ، قمت بتجربة نموذج قاعدة البيانات والاستعلام عن النموذج. لقد بدأت قاعدة البيانات ، وأنشأت النماذج ، وأدرجت السجلات ، واسترجعت السجلات ، واسترجعت السجلات بشروط باستخدام whereالفقرة ، وحذفت السجلات المحددة. مع هذه المعرفة بـ Sequelize ، ستنشئ الآن جمعيات في Sequelize. بعد ذلك ، ستتمكن من تحديد مجموعة متنوعة من العلاقات والعمل معها باستخدام نماذج Sequelize.

الخطوة 4 - إنشاء الجمعيات باستخدام Sequelize

في هذه الخطوة ، ستستخدم أنواع الارتباطات القياسية التي يدعمها Sequelize: اقترانات واحد لواحد ، وواحد بأطراف ، وأطراف بأطراف . ستستخدم بيانات نموذجية حول الطلاب والدورات التدريبية ومستويات الصفوف.

يستخدم Sequelize أنواع الاقتران بناءً على علاقات قاعدة البيانات التالية:

علاقة رأس برأس: تعني علاقة رأس برأس أن سجلًا في أحد الجداول مقترن بسجل واحد بالضبط في جدول آخر. فيما يتعلق بـ Sequelize ، يمكنك استخدامbelongsTo()والجمعياتhasOne()لإنشاء هذا النوع من العلاقات.

علاقة رأس بأطراف: تعني علاقة رأس بأطراف أن سجل في جدول واحد مقترن بسجلات متعددة في جدول آخر. باستخدام Sequelize ، يمكنك استخدامhasMany()طرق اقترانات لإنشاء هذا النوع من العلاقات.

علاقة أطراف بأطراف: تعني علاقة أطراف بأطراف أن سجلات متعددة في جدول واحد مرتبطة بسجلات متعددة في جدول آخر. باستخدام Sequelize ، يمكنك استخدامbelongsToMany()الجمعيات لإنشاء هذا النوع من العلاقات.

قبل إنشاء هذه الاقترانات ، ستقوم أولاً بإنشاء قاعدة بيانات جديدة تسمى student_dbوإضافة نماذج جديدة وبعض البيانات النموذجية للطلاب والدورات التدريبية ومستوى الصف الدراسي.

لإنشاء قاعدة البيانات ، اتبع نفس العملية في الخطوة 1 - تثبيت وتكوين Sequelize لتسجيل الدخول إلى MySQL وإنشاء قاعدة بيانات تسمى student_db. بمجرد إنشاء قاعدة البيانات الجديدة ، قم بتسجيل الخروج من MySQL. بعد ذلك ، ستبدأ في إنشاء اقترانات قاعدة البيانات.

إنشاء علاقة واحد لواحد معbelongsTo()

في هذا القسم ، ستقوم بإنشاء علاقة رأس برأس باستخدام نماذج Sequelize. تخيل أنك تريد الحصول على تفاصيل طالب واحد جنبًا إلى جنب مع مستوى صفه. نظرًا لأن طالبًا واحدًا يمكنه الحصول على مستوى صف واحد فقط ، فإن هذا النوع من الارتباط هو علاقة رأس برأس ويمكنك استخدام belongsTo()الطريقة.

ملاحظة: هناك فرق بين belongsTo()و hasOne(). belongsTo()ستضيف foreignKeyالجدول المصدر ، بينما hasOne()ستضيفه إلى الجدول الهدف. في أي حال ، إذا تم استخدام كلتا العلاقات في نفس الوقت ، فستعمل كعلاقات ثنائية الاتجاه ثنائية الاتجاه.

تسمح belongsTo()لك الطريقة بإنشاء علاقة رأس برأس بين نموذجين Sequelize. في هذا المثال ، أنت تستخدم نماذج Studentو .Grade

قم بإنشاء ملف جديد يسمى one_to_one.js. كما فعلت في القسم السابق ، الاتصال بقاعدة بيانات MySQL ، قم بتضمين الأسطر لإنشاء اتصال بقاعدة البيانات ومصادقة مستخدم MySQL الخاص بك في أعلى الملف. تأكد من تحديث بيانات اعتماد MySQL حسب الحاجة:

const { Sequelize, DataTypes } = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

في هذا القسم ، ستقوم بإنشاء ثلاثة نماذج في student_dbقاعدة البيانات الجديدة: Studentو Gradeو و Course. ستبدأ بإنشاء نماذج Studentو . Gradeلاحقًا في هذه الخطوة ، ستقوم بإنشاء Coursesالنموذج.

بالنسبة Studentللنموذج ، أضف كتلة التعليمات البرمجية التالية إلى one_to_one.js:

...
const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});

يحتوي نموذج الطالب هذا على عمودين: student_idو name.

بعد ذلك ، أضف كتلة التعليمات البرمجية Gradeللنموذج:

...
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

النموذج يحتوي Gradeعلى العمود grade.

لإثبات الارتباطات ، ستحتاج إلى إضافة بيانات نموذجية إلى قاعدة البيانات. لذلك ، ستستخدم bulk()الطريقة. بدلاً من إدراج البيانات في الصفوف واحدًا تلو الآخر ، bulkCreate()تسمح لك الطريقة بإدراج صفوف متعددة في نماذج قاعدة البيانات في وقت واحد.

حتى الآن ، قم باستيراد Gradeو Studentالبيانات إلى النماذج الخاصة بهم في قاعدة البيانات كما هو موضح:

...
const grade_data = [{grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           …
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

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

في one-to-one.js، أضف السطر التالي أسفل student_dataالكتلة:

...
Student.belongsTo(Grade);

بعد ذلك ، ستحتاج إلى التحقق مما إذا كان الارتباط يعمل بشكل صحيح. للقيام بذلك ، يمكنك استرداد جميع بيانات الطلاب بمستويات الصف المرتبطة عن طريق تمرير includeالمعلمة داخل findAll()الطريقة.

نظرًا لأنك بحاجة إلى الحصول على مستوى الطالب ، فسوف تنجح Gradeفي ذلك كنموذج. في sequelize.sync()الطريقة ، أضف الخطوط المميزة كما هو موضح:

...
sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Student.findAll({
               include: [{
                   model: Grade
               }]
           }).then(result => {
               console.log(result)
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

الكود الكامل يبدو كما يلي:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );
sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});

const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [{grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

// One-To-One association
Student.belongsTo(Grade);

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Student.findAll({
               include: [{
                   model: Grade
               }]
           }).then(result => {
               console.log(result)
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create the table : ', error);
});

احفظ وأغلق ملفك.

قم بتشغيل الملف باستخدام الأمر التالي:

node one_to_one.js

ستكون المخرجات طويلة ، وسترى بيانات جميع الطلاب بمستويات الصف. فيما يلي مقتطف من الإخراج يوضح بيانات الطالب:

Output
students {
    dataValues:
   { student_id: '3e786a8f-7f27-4c59-8e9c-a8c606892288',
       name: 'Sam Lewis',
       createdAt: 2021-12-16T08:49:38.000Z,
       updatedAt: 2021-12-16T08:49:38.000Z,
       gradeId: 1,
       grade: [grades] },
    _previousDataValues:
...

اعتمادًا على أدوات سطر الأوامر التي تستخدمها ، قد تتم طباعة الإخراج كعرض موسع أم لا. إذا كانت طريقة عرض موسعة ، فإنها تطبع gradeالكائن الموسع كإخراج.

في هذا القسم ، قمت بإنشاء علاقة رأس برأس باستخدام Student.belongsTo(Grade);استدعاء الأسلوب وحصلت على التفاصيل وفقًا للاقتران الذي أنشأته.

إنشاء علاقة رأس بأطراف معhasMany()

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

للبدء ، انسخ محتويات one_to_one.jsملف جديد يسمى one_to_many.js. في one_to_many.js، قم بإزالة الخطوط بعد student_dataالكتلة. one_to_many.jsسيبدو ملفك كالتالي:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [ {grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

بعد student_dataالكتلة ، استخدم hasMany()الطريقة لإنشاء علاقة جديدة:

...
Grade.hasMany(Student)

تسمح hasMany()لك الطريقة بإنشاء علاقة رأس بأطراف بين نموذجين Sequelize. هنا ، أنت تستخدم نماذج Gradeو .Student

بعد ذلك ، أضف sequelize.sync()الطريقة findAll()بالطريقة الموجودة أسفل hasMany()السطر:

...
sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Grade.findAll({
               where: {
                   grade: 9
               },
               include: [{
                   model: Student
               }]
           }).then(result => {
               console.dir(result, { depth: 5 });
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

هنا تحاول الوصول إلى جميع الطلاب في مستوى صف معين - في هذه الحالة ، جميع الطلاب في الصف 9. لقد أضفت أيضًا Studentالنموذج في includeالخيار.

ها هو الكود الكامل:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
  );

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
   student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
       primaryKey: true,
   },
   name: {
       type: DataTypes.STRING,
       allowNull: false
   }
});
const Grade = sequelize.define("grades", {
   grade: {
       type: DataTypes.INTEGER,
       allowNull: false
   }
});

const grade_data = [ {grade : 9}, {grade : 10}, {grade : 11}]

const student_data = [
   {name : "John Baker", gradeId: 2},
   {name : "Max Butler", gradeId: 1},
   {name : "Ryan Fisher", gradeId: 3},
   {name : "Robert Gray", gradeId: 2},
   {name : "Sam Lewis", gradeId: 1}
]

// One-To-Many relationship
Grade.hasMany(Student);

sequelize.sync({ force: true }).then(() => {
   Grade.bulkCreate(grade_data, { validate: true }).then(() => {
       Student.bulkCreate(student_data, { validate: true }).then(() => {
           Grade.findAll({
               where: {
                   grade: 9
               },
               include: [{
                   model: Student
               }]
           }).then(result => {
               console.dir(result, { depth: 5 });
           }).catch((error) => {
               console.error('Failed to retrieve data : ', error);
           });
       }).catch((err) => { console.log(err); });
   }).catch((err) => { console.log(err); });
}).catch((error) => {
   console.error('Unable to create table : ', error);
});

احفظ وأغلق ملفك.

قم بتشغيل الملف بالأمر التالي:

node one_to_many.js

سيبدو الإخراج مشابهًا لما يلي. ستكون طويلة جدًا ، ولكن 9سيتم إرجاع جميع الطلاب في الصف على النحو التالي:

Output
[ grades {
    dataValues:
     { id: 1,
       grade: 9,
       createdAt: 2021-12-20T05:12:31.000Z,
       updatedAt: 2021-12-20T05:12:31.000Z,
       students:
        [ students {
            dataValues:
             { student_id: '8a648756-4e22-4bc0-8227-f590335f9965',
               name: 'Sam Lewis',
               createdAt: 2021-12-20T05:12:31.000Z,
               updatedAt: 2021-12-20T05:12:31.000Z,
               gradeId: 1 },
...
          students {
            dataValues:
             { student_id: 'f0304585-91e5-4efc-bdca-501b3dc77ee5',
               name: 'Max Butler',
               createdAt: 2021-12-20T05:12:31.000Z,
               updatedAt: 2021-12-20T05:12:31.000Z,
               gradeId: 1 },
...

في هذا القسم ، قمت بإنشاء علاقة رأس بأطراف باستخدام Grade.hasMany(Student);استدعاء الأسلوب. في الإخراج ، قمت باسترداد التفاصيل وفقًا للاقتران الذي قمت بإنشائه.

إنشاء علاقات كثير إلى كثير معbelongsToMany()

في هذا القسم ، ستنشئ علاقات كثير إلى كثير باستخدام نماذج Sequelize. كمثال ، تخيل موقفًا حيث يتم تسجيل الطلاب في الدورات. يمكن لطالب واحد التسجيل في العديد من الدورات ويمكن أن تضم دورة واحدة العديد من الطلاب. هذه علاقة أطراف بأطراف. لتنفيذ ذلك باستخدام Sequelize ، ستستخدم النماذج Student، Courseومع StudentCourseالطريقة belongsToMany().

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

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
);

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

بعد ذلك ، ستنشئ نماذج قاعدة البيانات لعلاقات كثير إلى كثير: Studentو Course. ثم ستضيف بعض عينات البيانات إلى تلك النماذج.

...

const Student = sequelize.define("students", {
    student_id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const Course = sequelize.define("courses", {
    course_name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const StudentCourse = sequelize.define('StudentCourse', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
      allowNull: false
    }
  });

const course_data = [
    {course_name : "Science"},
    {course_name : "Maths"},
    {course_name : "History"}
]

const student_data = [
    {name : "John Baker", courseId: 2},
    {name : "Max Butler", courseId: 1},
    {name : "Ryan Fisher", courseId: 3},
    {name : "Robert Gray", courseId: 2},
    {name : "Sam Lewis", courseId: 1}
]

const student_course_data = [
    {studentId : 1, courseId: 1},
    {studentId : 2, courseId: 1},
    {studentId : 2, courseId: 3},
    {studentId : 3, courseId: 2},
    {studentId : 1, courseId: 2},
]

هنا ، يمكنك إنشاء نماذج Studentو Courseوتقديم بعض عينات البيانات. يمكنك أيضًا تعيين a courseID، والذي ستستخدمه لاسترداد الطلاب وفقًا لنوع العلاقة هذا.

أخيرًا ، قمت بتعريف نموذج جديد يسمى StudentCourse، والذي يدير بيانات العلاقة بين Studentو Course. في هذا المثال ، studentId 1تم تسجيله في courseId 1و courseId 2.

لقد أكملت بدء قاعدة البيانات وأضفت بيانات نموذجية إلى قاعدة البيانات. بعد ذلك ، قم بإنشاء علاقات أطراف بأطراف باستخدام belongsToMany()الطريقة كما هو موضح:

...
Course.belongsToMany(Student, { through: 'StudentCourse'})
Student.belongsToMany(Course, { through: 'StudentCourse'})

ضمن belongsToMany()الطريقة ، تقوم بتمرير throughالتكوين باسم النموذج كخيار التكوين. في هذه الحالة ، هو StudentCourse. هذا هو الجدول الذي يدير علاقات أطراف بأطراف.

أخيرًا ، يمكنك التحقق مما إذا كان الارتباط يعمل بشكل صحيح عن طريق استرداد جميع بيانات الدورة التدريبية مع الطلاب المرتبطين. ستفعل ذلك عن طريق تمرير includeالمعلمة داخل findAll()الطريقة. أضف الأسطر التالية إلى many_to_many.js:

...
sequelize.sync({ force: true }).then(() => {
    Course.bulkCreate(course_data, { validate: true }).then(() => {
        Student.bulkCreate(student_data, { validate: true }).then(() => {
            StudentCourse.bulkCreate(student_course_data, { validate: true }).then(() => {
                Course.findAll({
                    include: {
                        model: Student,
                    },
                }).then(result => {
                    console.log(result);
                }).catch((error) => {
                    console.error('Failed to retrieve data : ', error);
                });
            }).catch((error) => {
                console.log(error);
            });
        }).catch((error) => {
            console.log(error);
        });
    }).catch((error) => {
        console.log(error);
    });
}).catch((error) => {
    console.error('Unable to create table : ', error);
});

الكود الكامل يبدو كما يلي:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
);

sequelize.authenticate().then(() => {
   console.log('Connection has been established successfully.');
}).catch((error) => {
   console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
    student_id: {
       type: DataTypes.UUID,
       defaultValue: DataTypes.UUIDV4,
    },
    name: {
       type: DataTypes.STRING,
       allowNull: false
    }
});

const Course = sequelize.define("courses", {
    course_name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const StudentCourse = sequelize.define('StudentCourse', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
      allowNull: false
    }
  });

const course_data = [
    {course_name : "Science"},
    {course_name : "Maths"},
    {course_name : "History"}
]

const student_data = [
    {name : "John Baker", courseId: 2},
    {name : "Max Butler", courseId: 1},
    {name : "Ryan Fisher", courseId: 3},
    {name : "Robert Gray", courseId: 2},
    {name : "Sam Lewis", courseId: 1}
]

const student_course_data = [
    {studentId : 1, courseId: 1},
    {studentId : 2, courseId: 1},
    {studentId : 2, courseId: 3},
    {studentId : 3, courseId: 2},
    {studentId : 1, courseId: 2},
]

Course.belongsToMany(Student, { through: 'StudentCourse'})
Student.belongsToMany(Course, { through: 'StudentCourse'})

sequelize.sync({ force: true }).then(() => {
    Course.bulkCreate(course_data, { validate: true }).then(() => {
        Student.bulkCreate(student_data, { validate: true }).then(() => {
            StudentCourse.bulkCreate(student_course_data, { validate: true }).then(() => {
                Course.findAll({
                    include: {
                        model: Student,
                    },
                }).then(result => {
                    console.log(result);
                }).catch((error) => {
                    console.error('Failed to retrieve data : ', error);
                });
            }).catch((error) => {
                console.log(error);
            });
        }).catch((error) => {
            console.log(error);
        });
    }).catch((error) => {
        console.log(error);
    });
}).catch((error) => {
    console.error('Unable to create table : ', error);
});

أحفظ وأغلق الملف.

قم بتشغيل الملف باستخدام الأمر التالي:

node many_to_many.js

سيكون الإخراج طويلاً ، لكنه سيبدو مشابهًا لما يلي:

Output[ courses {
    dataValues:
     { id: 1,
       course_name: 'Science',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _previousDataValues:
     { id: 1,
       course_name: 'Science',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _changed: Set {},
    _options:
     { isNewRecord: false,
       _schema: null,
       _schemaDelimiter: '',
       include: [Array],
       includeNames: [Array],
       includeMap: [Object],
       includeValidated: true,
       attributes: [Array],
       raw: true },
    isNewRecord: false,
    students: [ [students], [students] ] },
  courses {
    dataValues:
     { id: 2,
       course_name: 'Maths',
       createdAt: 2022-05-11T04:27:37.000Z,
       updatedAt: 2022-05-11T04:27:37.000Z,
       students: [Array] },
    _previousDataValues:
...

كما ترى في هذا الإخراج ، تم استرداد الدورات التدريبية مع الطلاب المرتبطين بها. داخل coursesالكتلة ، سترى idقيمًا منفصلة تشير إلى كل دورة. على سبيل المثال ، id: 1متصل بفصل course_name: Scienceالعلوم ، بينما id: 2فئة الرياضيات ، وهكذا.

في قاعدة البيانات ، يمكنك رؤية الجداول الثلاثة التي تم إنشاؤها مع بيانات العينة التي أدخلتها.

في هذه الخطوة ، استخدمت Sequelize لإنشاء ارتباطات رأس برأس وواحد بأطراف ومتعددة. بعد ذلك ، ستعمل مع الاستعلامات الأولية.

الخطوة 5 - العمل مع الاستعلامات الأولية

في هذه الخطوة ، ستعمل مع الاستعلامات الأولية في Sequelize. في الخطوات السابقة ، استخدمت طرق Sequelize المضمنة ، مثل insert()و findAll()، للتعامل مع إدراج البيانات والتحديد من قاعدة البيانات. ربما لاحظت أن هذه التوابع تتبع نمطًا معينًا لكتابة استعلام. ومع ذلك ، مع استخدام الاستعلامات الأولية ، لا داعي للقلق بشأن أساليب وأنماط Sequelize المضمنة. باستخدام معرفتك باستعلامات SQL ، يمكنك إجراء مجموعة من الاستعلامات في Sequelize من البسيطة إلى الأكثر تقدمًا.

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

SELECT * FROM table_name;
DELETE FROM table_name WHERE condition;
UPDATE table_name SET y = 42 WHERE x = 12;

في Sequelize ، يمكن استخدام الاستعلامات الأولية مع منهجيتين أساسيتين: استبدال المصفوفة واستبدال الكائن. عندما تقوم بتمرير القيم إلى استعلام SQL ، يمكنك استخدام إما مصفوفة أو كائن للقيام بذلك الاستبدال.

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

بعد ذلك ، ستضيف بعض البيانات الأولية لبدء العمل مع الاستعلامات الأولية. قم بإنشاء ملف جديد يسمى add_student_records.jsوإضافة كتل التعليمات البرمجية التالية ، والتي تحتوي على طرق Sequelize التي تمت مناقشتها مسبقًا لـ authenticate()، sync()و ، و bulkCreate().

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

const Student = sequelize.define("students", {
    student_id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true,
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    }
});

const student_data = [
    {name : "John Baker"},
    {name : "Max Butler"},
    {name : "Ryan Fisher"},
    {name : "Robert Gray"},
    {name : "Sam Lewis"}
]

sequelize.sync({ force: true }).then(() => {

    Student.bulkCreate(student_data, { validate: true }).then((result) => {
        console.log(result);
    }).catch((error) => {
        console.log(error);
    });

}).catch((error) => {
    console.error('Unable to create table : ', error);
});

هنا ، تقوم ببدء اتصال قاعدة البيانات ، وإنشاء النموذج ، وإدراج بعض سجلات الطلاب داخل قاعدة البيانات الجديدة.

أحفظ وأغلق الملف.

بعد ذلك ، قم بتشغيل هذا البرنامج النصي باستخدام الأمر التالي:

node add_student_records.js

سيكون الإخراج شيئًا مشابهًا لما يلي. ستكون طويلة جدًا ، ولكن سيتم إرجاع جميع سجلات الطلاب التي أدخلتها على النحو التالي. لاحظ أنه نظرًا لأن قيمة UUID ( المعرفات الفريدة عالميًاstudent_id ) يتم إنشاؤها تلقائيًا ، فستكون مختلفة اعتمادًا على المستخدم.

Output
Executing (default): SELECT 1+1 AS result
Executing (default): DROP TABLE IF EXISTS `students`;
Connection has been established successfully.
Executing (default): DROP TABLE IF EXISTS `students`;
Executing (default): CREATE TABLE IF NOT EXISTS `students` (`student_id` CHAR(36) BINARY , `name` VARCHAR(255) NOT NULL, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`student_id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `students`
Executing (default): INSERT INTO `students` (`student_id`,`name`,`createdAt`,`updatedAt`) VALUES ('45d1f26c-ba76-431f-ac5f-f41282351710','John Baker','2022-06-03 07:27:49','2022-06-03 07:27:49'),('1cb4e34d-bfcf-4a97-9624-e400b9a1a5f2','Max Butler','2022-06-03 07:27:49','2022-06-03 07:27:49'),('954c576b-ba1c-4dbc-a5c6-8eaf22bbbb04','Ryan Fisher','2022-06-03 07:27:49','2022-06-03 07:27:49'),('e0f15cd3-0025-4032-bfe8-774e38e14c5f','Robert Gray','2022-06-03 07:27:49','2022-06-03 07:27:49'),('826a0ec9-edd0-443f-bb12-068235806659','Sam Lewis','2022-06-03 07:27:49','2022-06-03 07:27:49');
[
  students {
    dataValues: {
      student_id: '45d1f26c-ba76-431f-ac5f-f41282351710'`,
      name: 'John Baker',
      createdAt: 2022-06-03T07:27:49.453Z,
      updatedAt: 2022-06-03T07:27:49.453Z
    },
    _previousDataValues: {
      name: 'John Baker',
      student_id: '45d1f26c-ba76-431f-ac5f-f41282351710',
      createdAt: 2022-06-03T07:27:49.453Z,
      updatedAt: 2022-06-03T07:27:49.453Z
    },

…

في القسم التالي ، ستقوم بتطبيق الاستعلامات الأولية باستخدام أحد student_idالمخرجات في كتلة التعليمات البرمجية أعلاه. انسخه حتى يكون لديك في الأقسام التالية ، حيث ستستخدم query()الطريقة لاستبدال المصفوفة والكائنات.

استبدال المصفوفة

في هذا القسم ، ستستخدم query()طريقة استبدال المصفوفة. باستخدام هذه الطريقة ، يمكن لـ Sequelize تنفيذ استعلامات SQL الأولية أو المعدة بالفعل.

للبدء ، انسخ محتويات server.jsالملف من الخطوة 1 ، حيث يتضمن ذلك Sequelize()طريقة البدء وبدء قاعدة البيانات. الصق المحتويات في ملف جديد يسمى array_raw_query.js. قم بتحديث اسم قاعدة البيانات إلى sample_student_db:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

في نهاية الملف ، أضف مقطع التعليمات البرمجية التالي لاستبدال مصفوفة ، مع التأكد من استبداله REPLACE_STUDENT_IDبالقيمة student_idالتي نسختها في القسم السابق.

...
sequelize.query(
    'SELECT * FROM students WHERE student_id = ?',
    {
      replacements: ['REPLACE_STUDENT_ID'],
      type: sequelize.QueryTypes.SELECT
    }
).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

لاستبدال الصفيف ، يمكنك تمرير query()الأسلوب باستخدام استعلام SQL وكائن التكوين. يحتوي على replacementsالقيمة والنوع. للاستبدال ، تقوم بتمرير البيانات كمصفوفة والتقاط هذه القيم باستخدام ?رمز علامة الاستفهام ().

بعد ذلك ، نظرًا لأنك تحتاج إلى الحصول على بيانات حول طالب معين ، student_idيتم تمرير المعلمة كمعامل ثاني. بعد ذلك ، تقوم بتمرير type: sequelize.QueryTypes.SELECTزوج المفتاح والقيمة ، والذي يمكنك استخدامه لتحديد البيانات من قاعدة البيانات.

هناك بعض الأنواع الأخرى أيضًا ، مثل QueryTypes.UPDATEو QueryTypes.DELETE. بناءً على المتطلبات ، يمكنك تحديد النوع الذي يناسب غرضك.

يظهر ما يلي كتلة التعليمات البرمجية الكاملة. هنا تقوم بالاتصال بقاعدة البيانات واسترداد بيانات الطالب المحددة باستخدام استعلام خام.

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

sequelize.query(
    'SELECT * FROM students WHERE student_id = ?',
    {
      replacements: ['REPLACE_STUDENT_ID'],
      type: sequelize.QueryTypes.SELECT
    }
).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

احفظ وأغلق ملفك.

بعد ذلك ، يمكنك تشغيل هذا البرنامج النصي باستخدام الأمر التالي:

node array_raw_query.js

سترى ناتجًا مشابهًا لما يلي:

Output
Connection has been established successfully.
[ { student_id: 'STUDENT_ID_YOU_RETRIEVED',
    name: 'Robert Gray',
    createdAt: 2022-05-06T13:14:50.000Z,
    updatedAt: 2022-05-06T13:14:50.000Z } ]

بسبب المحدد student_id، قد تختلف قيم الإخراج الخاصة بك.

استبدال الكائن

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

للبدء ، قم بإنشاء ملف جديد يسمى object_raw_query.jsولصق كتل التعليمات البرمجية الكاملة من server.jsالملف ، مع تحديث قاعدة البيانات إلى sample_student_db.

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

بعد ذلك ، أضف كتلة التعليمات البرمجية التالية إلى نهاية object_raw_query.jsالملف الجديد:

...
sequelize.query(
  'SELECT * FROM students WHERE student_id = :id',
  {
    replacements: { id: 'REPLACE_STUDENT_ID' },
    type: sequelize.QueryTypes.SELECT
  }
 ).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

هنا ، تحصل على بيانات الطالب المحددة باستخدام طريقة استبدال الكائن. تقوم بإنشاء replacementكائن ، مع تعيين idمعلومات الطالب التي ترغب في استردادها { id: 'REPLACE_STUDENT_ID' }:.

في query()، تشير إلى 'SELECT * FROM students WHERE student_id = :id':. باستخدام هذه query()الطريقة ، تقوم بتمرير قيمة الاستبدال ككائن ، ولهذا تُعرف هذه الطريقة باسم استبدال الكائن.

ها هو الكود الكامل:

const {Sequelize, DataTypes} = require("sequelize");

const sequelize = new Sequelize(
   'sample_student_db',
   'DATABASE_USERNAME',
   'DATABASE_PASSWORD',
    {
      host: 'DATABASE_HOST',
      dialect: 'mysql'
    }
   );

sequelize.authenticate().then(() => {
    console.log('Connection has been established successfully.');
}).catch((error) => {
    console.error('Unable to connect to the database: ', error);
});

sequelize.query(
  'SELECT * FROM students WHERE student_id = :id',
  {
    replacements: { id: 'REPLACE_STUDENT_ID' },
    type: sequelize.QueryTypes.SELECT
  }
 ).then(result => {
    console.log(result);
}).catch((error) => {
    console.error('Failed to insert data : ', error);
});

أحفظ وأغلق الملف.

بعد ذلك ، قم بتشغيل هذا البرنامج النصي باستخدام الأمر التالي:

node object_raw_query.js

سيبدو الإخراج مشابهًا لما يلي:

Output
Connection has been established successfully.
[ { student_id: 'STUDENT_ID_YOU_RETRIEVED',
    name: 'Robert Gray',
    createdAt: 2022-05-06T13:14:50.000Z,
    updatedAt: 2022-05-06T13:14:50.000Z } ]

بسبب المحدد student_id، قد تختلف قيم الإخراج الخاصة بك.

في هذه الخطوة ، عملت مع الاستعلامات الأولية Sequelize باستخدام طريقتين مختلفتين: استبدال المصفوفة واستبدال الكائن.

استنتاج

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

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

مصدر المقال الأصلي على https://www.digitalocean.com

#sequelize #node #mysql #database